function convertPlacementToScenario() { $placements = json_decode(file(FNPL)[0], true); $scenario = Scenario::buildScenarioByPlacements($placements); $scenario['vms'] = json_decode(file(FNVM)[0], true); $scenario['pms'] = json_decode(file(FNPM)[0], true); file_put_contents(FNSC, json_encode($scenario)); return $scenario; }
/** * @depends testbuildScenarioByPlacements */ public function testJsonToScenario() { $placements = array(array('A:2', 'A:3'), array('B:1', 'B:2'), array('C:2', 'C:3'), array('D:1', 'D:2', 'D:3')); $scenario1 = Scenario::buildScenarioByPlacements($placements); $json = Scenario::toDataTableJSON($scenario1); $scenario2 = Scenario::getScenarioFromJSON($json); $this->assertEquals($scenario1['nvms'], $scenario2['nvms'], 'VM # !match'); $this->assertEquals($scenario1['npms'], $scenario2['npms'], 'PM # !match'); foreach ($scenario1['rvm'] as $key => $value) { $this->assertEquals($value, $scenario2['rvm'][$key], "# of placements of {$key} !match"); } foreach ($scenario1['rpm'] as $key => $value) { $this->assertEquals($value, $scenario2['rpm'][$key], "# of placements of {$key} !match"); } }
static function getCombinatorialSliceQuantities($scenario, $maxVM) { require_once 'libs/Combinatorics.php'; $combinatorics = new Math_Combinatorics(); $sliceSize = $maxVM * 2 + 1; $input = array_keys($scenario['placements']); $combinations = $combinatorics->combinations($input, $sliceSize); $quatities = array(); foreach ($combinations as $combination) { $slice = array(); foreach ($combination as $index) { $slice[] = $scenario['placements'][$index]; } $sliceScenario = Scenario::buildScenarioByPlacements($slice); $quatities[] = Approximation::calcularComRegrasMaxVMOutIn($sliceScenario, $maxVM); } return $quatities; }
static function getScenarioFromJSON($json) { $table = json_decode($json, true); unset($table['cols'][0]); foreach ($table['cols'] as $k => $v) { $pms[] = $v['label']; } $placements = array(); foreach ($table['rows'] as $r => $row) { $tmp = array_shift($row['c']); $vm = $tmp['v']; foreach ($row['c'] as $k => $c) { if ($c['v'] == 1) { $pm = $pms[$k]; $placements[$r][] = "{$vm}:{$pm}"; } } } return Scenario::buildScenarioByPlacements($placements); }
/** * @depends testgetInsidersCombinations */ public function testtreeSearchApproach() { $placements = array(array('A:1', 'A:2'), array('B:2', 'B:3'), array('C:1', 'C:3'), array('D:1', 'D:2'), array('E:2', 'E:3'), array('F:2', 'F:3'), array('G:1', 'G:3'), array('H:1', 'H:3')); $scenario = Scenario::buildScenarioByPlacements($placements); $maxVM = 3; $resp = Approximation::treeSearchApproach($scenario, $maxVM); $this->assertEquals(80, $resp, "# of approximation !match."); }