/** * @param $rideNodes * @param $emptyRideNodes * @param $drivingPools * @return RideConfiguration[] */ public function buildConfigurations($rideNodes, $drivingPools, $emptyRideNodes) { $this->rideNodes = $rideNodes; $this->drivingPools = $drivingPools; $this->emptyRides = $emptyRideNodes; $workNodes = $this->rideNodes; ConfigurationBuilder::sortNodesByStartMinute($workNodes); $this->adjacenceMatrix = ConfigurationBuilder::buildAdjacenceMatrixFromNodes($workNodes, $emptyRideNodes); //build some different configurations $rideConfigurations = array(); $diversity = count($this->drivingPools); $factor = $diversity * 2; // take for each driving pool another start node, // and then shuffle the whole node array some times // to create another start set to begin with for ($i = 0; $i < $factor; $i++) { $workRideNodes = $workNodes; if ($i > $diversity) { shuffle($workRideNodes); } else { $switch = $workRideNodes[0]; $workRideNodes[0] = $workRideNodes[$i]; $workRideNodes[$i] = $switch; } $rideConfigurations[] = $this->buildGenericLeastDurationConfiguration($workRideNodes); } return $rideConfigurations; }
/** * @param $rideNodes * @param $emptyRideNodes * @param $drivingPools * @return RideConfiguration[] */ public function buildConfigurations($rideNodes, $drivingPools, $emptyRideNodes) { $this->rideNodes = $rideNodes; $this->drivingPools = $drivingPools; $this->emptyRideNodes = $emptyRideNodes; $workNodes = $this->rideNodes; ConfigurationBuilder::sortNodesByStartMinute($workNodes); $this->adjacenceMatrix = ConfigurationBuilder::buildAdjacenceMatrixFromNodes($workNodes, $emptyRideNodes); //Initial Config by LeastDistance Strategy $s = microtime(true); // $initConfig = $this->buildFeasibleConfiguration(); $initConfig = $this->buildFeasibleConfigFromStrategy(new RideStrategyLeastDuration()); $e = microtime(true); $this->logWithParameters('ride.log.ridenodes', array(count($this->rideNodes), round($e - $s, 3))); if ($initConfig) { $configurations = $this->annealConfigurations($initConfig); return $configurations; } return null; }