Ich baue einen Marktplatz, und ich möchte einen passenden Mechanismus für die Aufträge der Marktteilnehmer aufbauen.Bester Algorithmus zum Aufrechnen von Aufträgen
So erhalte ich diese Aufträge:
A buys 50
B buys 100
C sells 50
D sells 20
, die als List<Orders>
dargestellt werden kann, wo Order
ist eine Klasse mit Participant
, BuySell
und Amount
ich eine Match
Funktion erstellen möchten, das gibt 2 Dinge aus:
- Eine Reihe von unmatche d Aufträge (
List<Order>
) - Eine Reihe von matched orders (
List<MatchedOrder>
woMatchOrder
hatBuyer
,Seller
,Amount
Die constrain ist die Anzahl der Aufträge (nicht angepasste und aufeinander abgestimmt) zu minimieren, während keine mögliche Übereinstimmung rückgängig gemacht verlassen (dh am Ende kann es nur sein, entweder kaufen oder Verkaufsaufträge, die nicht angepasst sind)
So in dem obigen Beispiel das Ergebnis wäre:
A buys 50 from C
B buys 20 from D
B buys 80 (outstanding)
Dies scheint ein ziemlich komplexer Algorithmus zum Schreiben zu sein, aber in der Praxis sehr verbreitet. Irgendwelche Hinweise, wo man hinschauen kann?
möchten Sie möglicherweise Netzwerk-Flow-Algorithmen betrachten – Mox
@Mox: Danke, ich werde einen Blick darauf werfen. Auf den ersten Blick scheint es so, als ob Flow-Algorithmen einen sehr allgemeinen Fall lösen, den ich versuche zu lösen. –
Sind Sie nicht verpflichtet, das Prinzip "first in, first served" zu beachten? Wenn dies nicht der Fall ist, bedeutet dies, dass eine andere ankommende Bestellung die Übereinstimmung früherer Kauf- und Verkaufsaufträge beliebig ändern kann, so dass z. Ein Kaufauftrag, der zuvor mit einem Verkaufsauftrag abgeglichen wurde, wird nun wieder ausstehend. –