PERCEPTRONIC
This commit is contained in:
90
JeuHoyEtudiants/JeuHoy_WPF_Natif/Model/Perceptron.cs
Normal file
90
JeuHoyEtudiants/JeuHoy_WPF_Natif/Model/Perceptron.cs
Normal file
@@ -0,0 +1,90 @@
|
||||
using JeuHoy_WPF;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using System.Windows;
|
||||
|
||||
namespace JeuHoy_WPF_Natif.Model {
|
||||
public class Perceptron {
|
||||
private double _cstApprentissage;
|
||||
private double[] _poidsSyn;
|
||||
private string _reponse = "?";
|
||||
public string Reponse { get => _reponse; }
|
||||
|
||||
/// <summary>
|
||||
/// Constructeur de la classe. Crée un perceptron pour une réponse(caractère) qu'on veut identifier le pattern(modèle)
|
||||
/// </summary>
|
||||
/// <param name="reponse">La classe que défini le perceptron</param>
|
||||
public Perceptron(string reponse) {
|
||||
Random _rand = new Random();
|
||||
_reponse = reponse;
|
||||
_cstApprentissage = CstApplication.CONSTANTEAPPRENTISSAGE;
|
||||
|
||||
_poidsSyn = new double[CstApplication.SKELETONCOUNT * 2];
|
||||
for (int x = 0; x < CstApplication.SKELETONCOUNT - 1; ++x)
|
||||
_poidsSyn[x] = _rand.NextDouble();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Faire l'apprentissage sur un ensemble de coordonnées. Ces coordonnées sont les coordonnées de tous les caractères analysés.
|
||||
/// </summary>
|
||||
/// <param name="lstCoord">La liste de coordonnées pour les caractères à analysés.</param>
|
||||
/// <returns>Les paramètres de la console</returns>
|
||||
public string Entrainement(List<Squelette> lstCoord) {
|
||||
int iNbItérations = 0,
|
||||
iNbErreurs = 0;
|
||||
double dSum = 0,
|
||||
dPourSucc = 0;
|
||||
|
||||
do {
|
||||
iNbErreurs = 0;
|
||||
foreach (Squelette coord in lstCoord) {
|
||||
dSum = _poidsSyn[0];
|
||||
|
||||
for (int j = 1; j < _poidsSyn.Length; ++j)
|
||||
dSum += _poidsSyn[j] * coord.Points[j - 1];
|
||||
|
||||
int iRes = (dSum >= 0) ? 1 : 0;
|
||||
int iErr = (_reponse == coord.Reponse ? 1 : 0) - iRes;
|
||||
|
||||
if (iErr != 0) {
|
||||
_poidsSyn[0] = _cstApprentissage;
|
||||
for (int j = 1; j < _poidsSyn.Length; ++j)
|
||||
_poidsSyn[j] += _cstApprentissage * iErr * coord.Points[j - 1];
|
||||
++iNbErreurs;
|
||||
}
|
||||
}
|
||||
dPourSucc = (double)(lstCoord.Count - iNbErreurs) / (double)lstCoord.Count * 100.0;
|
||||
++iNbItérations;
|
||||
}
|
||||
while (dPourSucc < CstApplication.POURCENTCONVERGENCE && iNbItérations < CstApplication.MAXITERATION);
|
||||
|
||||
return $"Perceptron: {_reponse}; Itérations: {iNbItérations} Taux Réussite: {dPourSucc.ToString("0.00")} %"; ;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Calcul la valeur(vrai ou faux) pour un les coordonnées d'un caractère. Permet au perceptron d'évaluer la valeur de vérité.
|
||||
/// </summary>
|
||||
/// <param name="vecteurSyn">Les poids synaptiques du perceptron</param>
|
||||
/// <param name="entree">Le vecteur de bit correspondant aux couleurs du caractère</param>
|
||||
/// <returns>Vrai ou faux</returns>
|
||||
public int ValeurEstime(double[] vecteurSyn, double[] entree) {
|
||||
double dSum = vecteurSyn[0];
|
||||
|
||||
for (int j = 1; j < vecteurSyn.Length; ++j)
|
||||
dSum += vecteurSyn[j] * entree[j - 1];
|
||||
|
||||
return (dSum >= 0) ? CstApplication.VRAI : CstApplication.FAUX;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Interroge la neuronnes pour un ensembles des coordonnées(d'un caractère).
|
||||
/// </summary>
|
||||
/// <param name="squel"></param>
|
||||
/// <returns></returns>
|
||||
public bool TesterNeurone(Squelette squel) => ValeurEstime(_poidsSyn, squel.Points) == CstApplication.VRAI ? true : false;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user