Ik zit met een opdracht voor school waarbij ik de werking van een taxibedrijf van een bepaalde dag moet simuleren. De volgende gegevens zijn op voorhand gegeven:
Op dit moment heb ik al 2 oplossingsmethode's geprobeerd:
Methode 2 is het traagste (half uur tot zelfs een uur) omdat hij telkens bij het afzetten van een klant, alle andere klanten overweegt om naartoe te rijden. Ik dacht dat dit een beter resultaat zou geven qua hoeveelheid vervoerde klanten maar helaas kom ik tot de conclusie dat slechts 40% van de klanten nu vervoerd worden.
Nu heb ik wel al beetje gegoogle'd voor het zoeken in graffen maar ofwel kom ik dan op dingen uit zoals het kortste pad berekenen (wat ik al heb) ofwel zaken die niet altijd toepasbaar zijn omdat Prolog met lijsten werkt (wat zoals we allemaal weten, niet echt goed is worst-case gezien).
Heeft er iemand misschien ideëen voor goede algoritmes die ik kan gebruiken? Of bepaalde optimalisaties die ik kan doorvoeren om beter te kunnen zoeken in de graf? Een (kleine) duw in de goede richting (zoekwoorden voor in Google die ik over het hoofd zie of namen van algoritmes) wordt zeer geapprecieerd!
PS: ik weet dat tijd niet echt een goede meetmethode is voor goede code maar ik moet dit in een demo kunnen tonen met een maximumduur
- Aantal beschikbare taxi's die klaarstaan aan het bedrijf.
- Aantal klanten met als info: plaats om ze op te pikken, plaats om ze af te zetten, periode van de dag waartussen ze opgehaald willen worden (uitgedrukt in minuten. Bv. 600 - 660 wil zeggen "tussen 10u en 11u 's ochtends")
- Een graf die de stad voorstelt waarin het taxibedrijf opereert. Op de nodes staan (mogelijk) klanten te wachten en de edges zijn gewogen (gewicht = tijd in minuten die nodig is om van node A naar node B te gaan via de edge)
Op dit moment heb ik al 2 oplossingsmethode's geprobeerd:
- Een grote loop waarin ik een teller bijhoud die het aantal verstreken minuten voorstelt. Bij elke iteratie vindt dan een bepaalde minuut van de dag plaats. In elke iteratie doe ik 2 stappen namelijk de volgende: ik kijk of ik taxi's kan sturen naar klanten om ze op tijd op te halen en ik beweeg de reeds vertrokken taxi's vooruit. Telkens als een klant afgezet wordt, kijk ik of er op de huidige locatie een andere klant staat die opgepikt kan worden en deze vervoer ik dan. Staat er geen andere klant, stuur ik de taxi terug naar het bedrijf om dan klaar te staan voor een mogelijk volgende klant.
- De andere methode die ik al heb is het uitplannen van de dag per taxi. Ik neem per iteratie in een loop een taxi en begin dan met een klant op te halen die vroeg opgehaald wil worden. Nadat deze klant opgehaald en weer afgezet is, kijk ik welk de meest dichtsbijzijnde klant is om deze dan te gaan ophalen. Hierdoor kan de taxi zo meerdere klanten na mekaar vervoeren zonder steeds terug te keren naar het bedrijf.
Methode 2 is het traagste (half uur tot zelfs een uur) omdat hij telkens bij het afzetten van een klant, alle andere klanten overweegt om naartoe te rijden. Ik dacht dat dit een beter resultaat zou geven qua hoeveelheid vervoerde klanten maar helaas kom ik tot de conclusie dat slechts 40% van de klanten nu vervoerd worden.
Nu heb ik wel al beetje gegoogle'd voor het zoeken in graffen maar ofwel kom ik dan op dingen uit zoals het kortste pad berekenen (wat ik al heb) ofwel zaken die niet altijd toepasbaar zijn omdat Prolog met lijsten werkt (wat zoals we allemaal weten, niet echt goed is worst-case gezien).
Heeft er iemand misschien ideëen voor goede algoritmes die ik kan gebruiken? Of bepaalde optimalisaties die ik kan doorvoeren om beter te kunnen zoeken in de graf? Een (kleine) duw in de goede richting (zoekwoorden voor in Google die ik over het hoofd zie of namen van algoritmes) wordt zeer geapprecieerd!
PS: ik weet dat tijd niet echt een goede meetmethode is voor goede code maar ik moet dit in een demo kunnen tonen met een maximumduur