Selling Icecreams

From Artificial Neural Network for PHP
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

FAQ

For information about dat-files have a view to the FAQ page.

Training

require_once 'ANN/Loader.php';

use ANN\Network;
use ANN\InputValue;
use ANN\OutputValue;
use ANN\Values;

try
{
  $objNetwork = Network::loadFromFile('icecreams.dat');
}
catch(Exception $e)
{
  print 'Creating a new one...';
	
  $objNetwork = new Network(2, 5, 1);


  $objTemperature = new InputValue(-15, 50); // Temperature in Celsius

  $objTemperature->saveToFile('input_temperature.dat');
  

  $objHumidity    = new InputValue(0, 100);  // Humidity percentage

  $objHumidity->saveToFile('input_humidity.dat');


  $objIcecream    = new OutputValue(0, 300); // Quantity of sold ice-creams

  $objIcecream->saveToFile('output_quantity.dat');


  $objValues = new Values;

  $objValues->train()
            ->input(
                   $objTemperature->getInputValue(20),
                   $objHumidity->getInputValue(10)
                   )
            ->output(
                   $objIcecream->getOutputValue(20)
                   )
            ->input(
                   $objTemperature->getInputValue(30),
                   $objHumidity->getInputValue(40)
                   )
            ->output(
                   $objIcecream->getOutputValue(90)
                   )
            ->input(
                   $objTemperature->getInputValue(32),
                   $objHumidity->getInputValue(30)
                   )
            ->output(
                   $objIcecream->getOutputValue(70)
                   )
            ->input(
                   $objTemperature->getInputValue(33),
                   $objHumidity->getInputValue(20)
                   )
            ->output(
                   $objIcecream->getOutputValue(75)
                   );

  $objValues->saveToFile('values_icecreams.dat');
  
  unset($objValues);
  unset($objTemperature);
  unset($objHumidity);
  unset($objIcecream);
}

try
{
  $objTemperature = InputValue::loadFromFile('input_temperature.dat'); // Temperature in Celsius

  $objHumidity    = InputValue::loadFromFile('input_humidity.dat'); // Humidity percentage

  $objIcecream    = OutputValue::loadFromFile('output_quantity.dat'); // Quantity of sold ice-creams
}
catch(Exception $e)
{
  die('Error loading value objects');
}

try
{
  $objValues = Values::loadFromFile('values_icecreams.dat');
}
catch(Exception $e)
{
  die('Loading of values failed');
}

$objNetwork->setValues($objValues); // to be called as of version 2.0.6

$boolTrained = $objNetwork->train();

print ($boolTrained)
        ? 'Network trained'
        : 'Network not trained completely. Please re-run the script';

$objNetwork->saveToFile('icecreams.dat');

$objNetwork->printNetwork();

Using trained network

require_once 'ANN/Loader.php';

use ANN\Network;
use ANN\InputValue;
use ANN\OutputValue;
use ANN\Values;

try
{
  $objNetwork = Network::loadFromFile('icecreams.dat');
}
catch(Exception $e)
{
  die('Network not found');
}

try
{
  $objTemperature = InputValue::loadFromFile('input_temperature.dat'); // Temperature in Celsius

  $objHumidity    = InputValue::loadFromFile('input_humidity.dat');    // Humidity percentage

  $objIcecream    = OutputValue::loadFromFile('output_quantity.dat');  // Quantity of sold ice-creams
}
catch(Exception $e)
{
  die('Error loading value objects');
}

try
{
  $objValues = Values::loadFromFile('values_icecreams.dat');
}
catch(Exception $e)
{
  die('Loading of values failed');
}

$objValues->input( // input values appending the loaded ones
                 $objTemperature->getInputValue(17),
                 $objHumidity->getInputValue(12)
                 )
          ->input(
                 $objTemperature->getInputValue(31),
                 $objHumidity->getInputValue(42)
                 )
          ->input(
                 $objTemperature->getInputValue(31),
                 $objHumidity->getInputValue(34)
                 )
          ->input(
                 $objTemperature->getInputValue(34),
                 $objHumidity->getInputValue(21)
                 );

$objNetwork->setValues($objValues);

$arrOutputs = $objNetwork->getOutputs();

foreach($arrOutputs as $arrOutput)
  foreach($arrOutput as $floatOutput)
    print $objIcecream->getRealOutputValue($floatOutput). '<br />';