public function __construct()
 {
     session_start();
     // Figure out the maps available
     self::$arrAvailableMaps = array_diff(scandir('maps'), array('..', '.'));
     require 'classes/Map.php';
     // Figure out which state generators are available in StateGenerator.php
     $arrExistingClasses = get_declared_classes();
     require 'classes/StateGenerator.php';
     array_push($arrExistingClasses, 'StateGenerator');
     // We don't want the abstract parent StateGenerator class
     array_push($arrExistingClasses, 'RouteGenerator');
     // We don't want the abstract parent RouteGenerator class
     self::$arrAvailableStateGenerators = array_diff(get_declared_classes(), $arrExistingClasses);
     // Figure out which algorithms are available in Algorithm.php
     $arrExistingClasses = get_declared_classes();
     require 'classes/Algorithm.php';
     array_push($arrExistingClasses, 'Algorithm');
     // We don't want the abstract parent class Algorithm
     self::$arrAvailableAlgorithms = array_diff(get_declared_classes(), $arrExistingClasses);
     // Instantiate the problem
     require 'classes/TravellingSalesman.php';
     $this->objProblem = new TravellingSalesMan();
     // Set a default action
     $sAction = isset($_REQUEST['action']) ? $_REQUEST['action'] : 'renderInterface';
     // Set a default response
     $arrResponse = array("bOutcome" => false);
     // Carry out requested action
     switch ($sAction) {
         case 'renderInterface':
             $this->renderInterface();
             break;
         case 'setMap':
             $arrResponse['bOutcome'] = $this->setMap($_REQUEST['sMapName']);
             break;
         case 'setAlgorithm':
             $arrResponse['bOutcome'] = $this->setAlgorithm($_REQUEST['sAlgorithmName']);
             break;
         case 'setStateGenerator':
             $arrResponse['bOutcome'] = $this->setStateGenerator($_REQUEST['sStateGeneratorName']);
             break;
         case 'getSolution':
             $arrResponse = $this->getSolution();
             break;
         case 'getStats':
             $arrResponse = $this->objProblem->getStats();
             break;
         default:
             $arrResponse['sMessage'] = "Action parameter not recognized, use 'renderInterface', 'setMap', 'setAlgorithm', 'setStateGenerator' or 'getSolution'.";
             break;
     }
     echo json_encode($arrResponse);
 }