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); }
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(); }
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]; }