public function testHeap()
 {
     $heap = new RoadmapHeap();
     $heap->insert(new Roadmap([new Place("Imperia", new Point(43.889686, 8.039517)), new Place("Sanremo", new Point(43.815967, 7.776057)), new Place("Ventimiglia", new Point(43.791237, 7.607586))]));
     $heap->insert(new Roadmap([new Place("Sanremo", new Point(43.815967, 7.776057)), new Place("Imperia", new Point(43.889686, 8.039517)), new Place("Ventimiglia", new Point(43.791237, 7.607586))]));
     $min = $heap[0];
     $this->assertEquals("Imperia", $min->places[0]->name);
     $this->assertEquals("Sanremo", $min->places[1]->name);
     $this->assertEquals("Ventimiglia", $min->places[2]->name);
 }
Esempio n. 2
0
 public function getShortestPath(Roadmap $roadmap)
 {
     $life = new RoadmapHeap();
     $life->insert($roadmap);
     $life->insert($this->mutator->mutate($roadmap));
     for ($i = 0; $i < $this->generation; $i++) {
         if (rand(0, 10) < 7) {
             $pos = abs($this->rand(0, count($life), 1) - ceil(count($life) / 2));
             $pos2 = abs($this->rand(0, count($life), 1) - ceil(count($life) / 2));
             list($one, $two) = $this->recombine->reproduction($life[$pos], $life[$pos2]);
             $life->insert($one);
             $life->insert($two);
         } else {
             $pos = abs($this->rand(0, count($life), 1) - ceil(count($life) / 2));
             $life->insert($this->mutator->mutate($life[$pos]));
         }
     }
     return $life[0];
 }
Esempio n. 3
0
 public function getShortestPath(Roadmap $roadmap)
 {
     $life = new RoadmapHeap();
     $life->insert($roadmap);
     $life->insert($this->mutator->mutate($roadmap));
     for ($i = 0; $i < $this->generation; $i++) {
         $life->insert($this->mutator->mutate($life->current()));
     }
     return $life->current();
 }