with PHP on a Symfony Console TicTacToe game
Artificial Neural Networks
ANN with PHP SymfonyCon Madrid 2014
Agenda
1. Demo
2. Symfony Console
3. Symfony Console Helpers
4. ANN Theory
6. PHP + FANN
7. Show me the code
8. Demo
9. Q&A
ANN with PHP SymfonyCon Madrid 2014
Demo
vs.
ANN with PHP SymfonyCon Madrid 2014
Symfony Console
ANN with PHP SymfonyCon Madrid 2014
Symfony Console - Installation
#!/usr/bin/env php<?phprequire __DIR__ . ‘/../vendor/autoload.php';
use Symfony\Component\Console\Application; $app = new Application(); $app->run();
bin/console
{ ... "require": { "symfony/console": "~2.5" } ...}
composer.json
ANN with PHP SymfonyCon Madrid 2014
Symfony Console - Installation
#!/usr/bin/env php<?phprequire __DIR__ . ‘/../vendor/autoload.php';
use Symfony\Component\Console\Application; $app = new Application(); $app->run();
bin/console
{ ... "require": { "symfony/console": "~2.5" } ...}
composer.json
$ php bin/console
$ chmod +x bin/console$ bin/console
ANN with PHP SymfonyCon Madrid 2014
ANN with PHP SymfonyCon Madrid 2014
Symfony console style guidehttps://github.com/symfony/symfony-docs/issues/4265
Created by @javiereguiluzImproved by Symfony community
ANN with PHP SymfonyCon Madrid 2014
Symfony Console Helpers
Progress bar
Table
Question
Formatter
ANN with PHP SymfonyCon Madrid 2014
<?php// create a new progress bar (10 units)$progress = new ProgressBar($output, 10); // start and displays the progress bar$progress->start(); $i = 0; while ($i++ < 10) { // ... do some work // advance the progress bar 1 unit $progress->advance(); } // ensure that the progress bar is at 100%$progress->finish();
Command.php
Progress bar
ANN with PHP SymfonyCon Madrid 2014
We all techies love progress bars
ANN with PHP SymfonyCon Madrid 2014
Table
<?php $table = new Table($output); $table ->setHeaders(array('Component', 'Package')) ->setRows(array( array('Console', 'symfony/console'), array('Form', 'symfony/form'), array('Finder', 'symfony/finder'), array('Config', 'symfony/config'), array('...', '...'), )) ; $table->render();
Command.php
ANN with PHP SymfonyCon Madrid 2014
Question
<?php
$helper = $this->getHelper('question'); $question = new ConfirmationQuestion( 'Dou you want to play again? ', false ); if (!$helper->ask($input, $output, $question)) { $output->writeln("Bye bye!"); return; } $output->writeln("Let's play again!");
Command.php
ANN with PHP SymfonyCon Madrid 2014
Formatter
<?php $formatter = $this->getHelper('formatter'); $formattedLine = $formatter->formatSection( 'Game finished', 'Player one wins.'); $output->writeln($formattedLine); $errorMessages = array( 'Error!', 'Move already done.’ ); $formattedBlock = $formatter ->formatBlock($errorMessages, 'error'); $output->writeln($formattedBlock);
Command.php
ANN with PHP SymfonyCon Madrid 2014
Our helper
ANN with PHP SymfonyCon Madrid 2014
Board
<?php
// Board example usage $board = new Board( $output, $this->getApplication() ->getTerminalDimensions(), 3, // Board size false // Don’t override the screen );
// Update and display the board status$board->updateGame(0,0,1);
Command.php
ANN with PHP SymfonyCon Madrid 2014
Board
<?php
// Board example - four in a row$board = new BoardHelper( $output, $this->getApplication() ->getTerminalDimensions(), 4, // Board size false // Don’t override screen true // Board with backgrounded cells );
// Update the board status (Player 1) $board->updateGame(0,0,1);
// Update the board status (Player 2) $board->updateGame(0,1,2);
Command.php
ANN with PHP SymfonyCon Madrid 2014
Board
<?php
// Example TicTacToe with overwrite$board = new TicTacToeHelper( $output, $this->getApplication() ->getTerminalDimensions(), 3, // Board size true // Overwrite screen);
// Update the board status and display$board->updateGame(1,1,1); $board->updateGame(0,0,2); $board->updateGame(2,0,1); $board->updateGame(0,2,2); $board->updateGame(0,1,1); $board->updateGame(2,1,2); $board->updateGame(1,0,1); $board->updateGame(1,2,2); $board->updateGame(2,2,1);
Command.php
ANN with PHP SymfonyCon Madrid 2014
Board<?phpnamespace PHPGames\Console\Helper; class Board{ /** * @var \Symfony\Component\Console\Output\OutputInterface */ private $output; /** * Clears the output buffer */ private function clear() { $this->output->write("\e[2J"); } // ...
Board.php
Instruction thatclears the screen
ANN with PHP SymfonyCon Madrid 2014
There is a bonus helper
ANN with PHP SymfonyCon Madrid 2014
Symfony Console - HAL
<?php
$hal = new HAL($output); $hal->sayHello();
Command.php
ANN with PHP SymfonyCon Madrid 2014
Computer model that intends to simulate how the brain works
Artificial Neural Networks
ANN with PHP SymfonyCon Madrid 2014
Input neuron
A typical ANN
Hidden neuron
Output neuron
Signal & weight
ANN with PHP SymfonyCon Madrid 2014
Activation FunctionsFunctions to process the input and produce a signal as output
ANN with PHP SymfonyCon Madrid 2014
Activation Functions• Step - output is 0 or 1
• Linear Combination - output is input sum plus a linear bias
• Continuous Log-Sigmoid
ANN with PHP SymfonyCon Madrid 2014
Activation Functions• Step - output is 0 or 1
• Linear Combination - output is input sum plus a linear bias
• Continuous Log-Sigmoid
ANN with PHP SymfonyCon Madrid 2014
Activation Functions• Step - output is 0 or 1
• Linear Combination - output is input sum plus a linear bias
• Continuous Log-Sigmoid
ANN with PHP SymfonyCon Madrid 2014
BackpropagationBackward propagation of errors
Passes error signals backwards through the network during training to update the weights of the network
ANN with PHP SymfonyCon Madrid 2014
ANN Types
ANN with PHP SymfonyCon Madrid 2014
ANN types• Feedforward neural network
Information goes only in one direction, forward.
• Radial basis function network (RBF) Interpolation in multidimensional space.
• Kohonen self-organizing network A set of artificial neurons learn to map points in an input space to coordinates in an output space.
ANN with PHP SymfonyCon Madrid 2014
ANN types• Feedforward neural network
Information goes only in one direction, forward.
• Radial basis function network (RBF) Interpolation in multidimensional space.
• Kohonen self-organizing network A set of artificial neurons learn to map points in an input space to coordinates in an output space.
ANN with PHP SymfonyCon Madrid 2014
ANN types• Feedforward neural network
Information goes only in one direction, forward.
• Radial basis function network (RBF) Interpolation in multidimensional space.
• Kohonen self-organizing network A set of artificial neurons learn to map points in an input space to coordinates in an output space.
ANN with PHP SymfonyCon Madrid 2014
ANN Learning
ANN with PHP SymfonyCon Madrid 2014
ANN Learning
• Supervised
• Unsupervised
• Reinforcement
• Supervised
• Unsupervised
• Reinforcement
ANN with PHP SymfonyCon Madrid 2014
ANN Learning
• Supervised
• Unsupervised
• Reinforcement
ANN with PHP SymfonyCon Madrid 2014
ANN Learning
• Supervised
• Unsupervised
• Reinforcement
ANN with PHP SymfonyCon Madrid 2014
With some slights adaptations to solve
We've used Reinforcement Learning
ANN with PHP SymfonyCon Madrid 2014
Temporal Credit Assignment Problem
ANN with PHP SymfonyCon Madrid 2014
(WTF) ANN withArtificial Neural Networks with PHP
What The Fann
ANN with PHP SymfonyCon Madrid 2014
ANN with PHP SymfonyCon Madrid 2014
Meet libfann & PECL fann$~> sudo apt-get install libfann; sudo pecl install fann
(WTF) ANN with
ANN with PHP SymfonyCon Madrid 2014
(WTF) ANN with OS X1. Install autoconf 2. Install cmake 3. Compile FANN 4. Install php fann extension with PECL 5. Add the extension to php.ini
$ brew install autoconf
ANN with PHP SymfonyCon Madrid 2014
(WTF) ANN with OS X1. Install autoconf 2. Install cmake 3. Compile FANN 4. Install php fann extension with PECL 5. Add the extension to php.ini
$ brew install cmake
ANN with PHP SymfonyCon Madrid 2014
(WTF) ANN with OS X1. Install autoconf 2. Install cmake 3. Compile FANN 4. Install php fann extension with PECL 5. Add the extension to php.ini
$ cd FANN-2.2.X-Source $ cmake . $ sudo make install
ANN with PHP SymfonyCon Madrid 2014
(WTF) ANN with OS X1. Install autoconf 2. Install cmake 3. Compile FANN 4. Install php fann extension with PECL 5. Add the extension to php.ini
$ sudo pecl install fann
ANN with PHP SymfonyCon Madrid 2014
(WTF) ANN with OS X1. Install autoconf 2. Install cmake 3. Compile FANN 4. Install php fann extension with PECL 5. Add the extension to php.ini
extension=fann.so
ANN with PHP SymfonyCon Madrid 2014
Enjoy!
(WTF) ANN with
ANN with PHP SymfonyCon Madrid 2014
Show me the code!
(WTF) ANN with
ANN with PHP SymfonyCon Madrid 2014
Demo
vs.
ANN with PHP SymfonyCon Madrid 2014
ANN with PHP SymfonyCon Madrid 2014
The two neurons behind this talk
ANN with PHP SymfonyCon Madrid 2014
Eduardo Gulias
• EmailValidator (Symfony >= 2.5, Drupal 8).
• ListenersDebugCommandBundle (ezPublish 5).
• PHPMad UG co-founder (Former Symfony Madrid).
• Team leader at
@egulias
ANN with PHP SymfonyCon Madrid 2014
Ariel Ferrandini
• Symfony simple password encoder service. (Symfony >=2.6).
• Symfony DX application collaborator.
• PHPMad UG co-founder.
• Team leader at Paradigma Tecnológico
@aferrandini
ANN with PHP SymfonyCon Madrid 2014
Resources• Wikipedia (http://en.wikipedia.org/wiki/Artificial_neural_network)
• Introduction for beginners (http://arxiv.org/pdf/cs/0308031.pdf)
• Introduction to ANN (http://www.theprojectspot.com/tutorial-post/introduction-to-artificial-neural-networks-part-1/7)
• Reinforcement learning (http://www.willamette.edu/~gorr/classes/cs449/Reinforcement/reinforcement0.html)
• PHP FANN (http://www.php.net/fann)
ANN with PHP SymfonyCon Madrid 2014
Resources
• Repo PHPGames (https://github.com/phpgames/ANNTicTacToe)
• Repo Board helper (https://github.com/phpgames/BoardHelper)
• Repo HAL helper (https://github.com/phpgames/HALHelper)
ANN with PHP SymfonyCon Madrid 2014
Thank you!
https://joind.in/12951
ANN with PHP SymfonyCon Madrid 2014
Questions?
https://joind.in/12951