Smarta rymdraketen


Programmera i Java en självstyrd rymdraket som i en två-dimensionell rymd klarar av att rädda (fånga upp) austronauter, som råkat på villovägar från sin rymdstation och för dem tillbaka till basen (rymdstationen). Raketen har begränsad mängd bränsle så det är därför viktigt att den rör sej kortaste möjliga sträcka när den plockar upp astronauterna. Astronauterna har också begränsad mängd syre så en mellantankning vore ödesdiger!

r

Kravspecifikation
  • Astronauternas positioner är slumpmässiga
  • Astronauterna behöver inte röra sej
  • Astronauternas antal bestäms via en variabel i programkoden
  • När spelet börjar och astronauterna ritats ut skall en algoritm räkna ut vilken rutt som är kortast
  • När rutten beräknats animeras raketen genom den beräknade rutten, dvs. den startar från basen, plockar upp alla astronauter och återvänder till basen
  • Slumpmässiga meteoriter kan även förekomma
  • Meteoriternas startpunkt, hastighet och riktning är slumpmässiga (de startar dock alltid utanför spelområdet)
  • Metoriternas hastighet och riktning är konstanta
  • Raketen skall klara av att undvika kollision med eventuella metoriter, dvs. om en meteorit kommer i vägen skall raketen göra något av följande:
    • stanna och vänta på att metoriten passerar
    • göra en väjningsrörelse och beräkna ny rutt
  • Programkoden skall optimeras för multi-processor arkitekturer, dvs:
    • Sök "hotspots" i programkoden och parallellisera där det är möjligt
    • Gör dock inga onödiga parallelliseringar!
    • Koden skall parallelliseras beroende på hur många processorer/processorkärnor som är tillgängliga för virtualmaskinen när programmet körs.
Tips
Principer för bedömmning
  • Vitsord 1
    • Minst 10 punkter med slumpmässiga kordinater ritas på skärmen
    • Alla punkterna sammanbinds m.h.a. "sök närmaste granne" metoden genom att t.ex. rita linjer mellan dem (observera att denna metod resulterar inte i kortaste totala rutt!)
    • Den mest resurskrävande algoritmen/funktionaliteten i koden är optimerad för 2 processorkärnor
  • Vitsord 5
    • Programmet uppfyller kravspecifikationen till 100% med följande "flexibilitet":
      • Kortaste rutten löses med "testa alla möjliga lösningar" metoden
      • Raketen klarar av att undvika krock med meteoriter
        • ELLER
      • Kortaste rutten beräknas med en matematiskt optimerad metod och klarar på så sätt av flera astronauter än "testa alla möjliga lösningar" metoden
      • Raketen behöver i detta fall inte kunna undvika krock med meteoriter


Jonny Karlsson 2009