public function __construct($chromosome, Element $element = null) { if (is_array($chromosome)) { $this->chromosome = $chromosome; } else { $this->chromosome = new SplFixedArray($chromosome); for ($gene = 0; $gene < $chromosome; $gene++) { if (0.5 < Random::generate()) { $this->setGene($gene, 1); } else { $this->setGene($gene, 0); } } } }
public function mutate(Population $population) { $newPopulation = new Population($population->size()); for ($populationIndex = 0; $populationIndex < $population->size(); $populationIndex++) { $individual = $population->getFittestIndividual($populationIndex); for ($geneIndex = 0; $geneIndex < $individual->getChromosomeLength(); $geneIndex++) { if ($populationIndex >= $this->elitismCount) { if ($this->mutationRate > Random::generate()) { $newGene = 1; if ($individual->getGene($geneIndex) == 1) { $newGene = 0; } $individual->setGene($geneIndex, $newGene); } } } $newPopulation->setIndividual($populationIndex, $individual); } return $newPopulation; }
$element->addProperty(new Property(6, "font-weight", ["normal", "lighter", "bold"])); $element->addProperty(new Property(7, "letter-spacing", ["-3px", "-2px", "-1px", "0px", "1px", "2px", "3px"])); $element->addProperty(new Property(7, "background-color", ["#1abc9c", "#16a085", "#f1c40f", "#f39c12", "#40d47e", "#27ae60", "#e67e22", "#d35400", "#3498db", "#2980b9", "#e74c3c", "#c0392b", "#9b59b6", "#8e44ad", "#ecf0f1", "#bdc3c7", "#34495e", "#2c3e50", "#95a5a6", "#7f8c8d"])); $ga = new GeneticAlgorithm(5, 0.9, 0.1, 1); $population = $ga->initPopulation($element); $individuals = $population->getIndividuals(); //Printing Style echo "<style>"; foreach ($individuals as $id => $individual) { echo "\n" . $ga->decode($id + 1, $individual, $element); } echo "</style>"; //Printing headers foreach ($individuals as $id => $individual) { $id++; echo "Encoded: " . $individual . "<br>"; echo "Decoded: <h1 id='individual{$id}'>This is a Title</h1>"; echo '<input type="text" class="input_range" id="range_' . $id . '" form="form1" name="individual_' . $id . '" value="" />'; } //TEMP:: Setting random fitness foreach ($population->getIndividuals() as &$i) { $i->setFitness(Random::generate()); } $ga->evalPopulation($population); echo $population->getPopulationFitness() . "<br>"; $_SESSION['population'] = serialize($population); ?> <?php include_once "includes/masterpage/footer.php ";
<?php require 'vendor/autoload.php'; require 'Random.php'; // Ukljuci debug // ini_set('display_errors',1); // ini_set('display_startup_errors',1); // error_reporting(-1); use sweelix\guid\Guid; use Slim\Slim; use SlimJson\Middleware; $app = new Slim(); // Dodaj JSON midleware globalno $app->add(new Middleware(array('json.status' => true, 'json.override_error' => true, 'json.override_notfound' => true))); // Povezi se sa bazom $pdo = new PDO("sqlite:db.sqlite"); $fpdo = new FluentPDO($pdo); // API za generisanje slucajnog broja $app->get('/match(/:id)', function ($id = '%NO-DATA%') use($app, $fpdo) { if ($id == '%NO-DATA%') { $id = Guid::v4(); } $match = $fpdo->from('matches')->where('id', $id)->fetch(); if (!$match) { $data = ['id' => $id, 'player1_id' => NULL, 'player2_id' => NULL, 'data' => implode(';', Random::generate($id, 500, 0, 100))]; $query = $fpdo->insertInto('matches', $data)->execute(); $match = $data; } $app->render(200, $match); }); $app->run();
public function mutateUniform(Population $population, Element $element) { $newPopulation = new Population($population->size()); for ($populationIndex = 0; $populationIndex < $population->size(); $populationIndex++) { $individual = $population->getFittestIndividual($populationIndex); $randomIndividual = new Individual($element); for ($geneIndex = 0; $geneIndex < $individual->getChromosomeLength(); $geneIndex++) { if ($populationIndex >= $this->elitismCount) { if ($this->mutationRate > Random::generate()) { $individual->setGene($geneIndex, $randomIndividual->getGene($geneIndex)); } } } $newPopulation->setIndividual($populationIndex, $individual); } return $newPopulation; }