Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
GA Sequencer - Form1.vb

Form1.vb

Caricato da: Totem
Scarica il programma completo

  1. Imports GA_Sequencer.GeneticEngine
  2. Public Class Form1
  3.     Private Engine As New GeneticEngine.Engine()
  4.     Private [Stop] As Boolean = False
  5.     Private LastResult As Boid
  6.  
  7.     Private Sub nudPopulationSize_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles nudPopulationSize.ValueChanged
  8.         nudCrossovers.Maximum = nudPopulationSize.Value / 2 - 1
  9.     End Sub
  10.  
  11.     Private Sub btnCalculate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCalculate.Click
  12.         btnStop.Enabled = True
  13.  
  14.         GeneralData.MaxTreeDepth = nudMaxTreeDepth.Value
  15.         GeneralData.MutationProbability = nudMutationProbability.Value
  16.  
  17.         Engine.Reset()
  18.         Dim X, Y As Double
  19.         For Each R As DataGridViewRow In dgvData.Rows
  20.             If R.Index = dgvData.Rows.Count - 1 Then
  21.                 Exit For
  22.             End If
  23.             If R.Cells(0).Value Is DBNull.Value Or R.Cells(1).Value Is DBNull.Value Then
  24.                 MessageBox.Show("Compiare correttamente la riga " & (R.Index + 1) & ".", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
  25.                 Exit Sub
  26.             Else
  27.                 X = CDbl(R.Cells(0).Value)
  28.                 Y = CDbl(R.Cells(1).Value)
  29.             End If
  30.             Engine.X.Add(X)
  31.             Engine.Y.Add(Y)
  32.         Next
  33.         GeneralData.ValueSizeOrder = (Engine.X.Average() + Engine.Y.Average()) / 2
  34.  
  35.         Engine.PopulationSize = nudPopulationSize.Value
  36.         Engine.CrossoverNumber = nudCrossovers.Value
  37.         Engine.Elitism = chbElitism.Checked
  38.  
  39.         Dim PrevBestFitness As Double = Double.MaxValue
  40.         Do
  41.             Engine.NextGeneration()
  42.  
  43.             lblGeneration.Text = "Numero generazione: " & Engine.CurrentGeneration
  44.             With Engine.BestBoid
  45.                 If .Fitness < PrevBestFitness Then
  46.                     Engine.BestBoid.Expression.MainNode = Engine.BestBoid.Expression.MainNode.Simplify()
  47.                     txtResult.Text = .Expression.ToString()
  48.                     lblError.Text = "Errore: " & .Fitness
  49.                     PrevBestFitness = .Fitness
  50.                     LastResult = Engine.BestBoid
  51.                 End If
  52.                 If .Fitness = 0 Then
  53.                     txtResult.Text = .Expression.ToString()
  54.                     MessageBox.Show("Il programma ha trovato la soluzione perfetta!", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information)
  55.                     [Stop] = True
  56.                 End If
  57.             End With
  58.  
  59.             Application.DoEvents()
  60.         Loop Until [Stop] = True
  61.  
  62.         btnStop.Enabled = False
  63.         btnTryVariation.Enabled = True
  64.         [Stop] = False
  65.     End Sub
  66.  
  67.     Private Sub btnStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnStop.Click
  68.         [Stop] = True
  69.     End Sub
  70.  
  71.     Private Sub btnTryVariation_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnTryVariation.Click
  72.         btnStop.Enabled = True
  73.  
  74.         Dim Temp As Boid
  75.         Dim Index As Int32 = 1
  76.         Do
  77.             lblGeneration.Text = "Numero generazione: " & Index
  78.  
  79.             Temp = New Boid(False)
  80.             Temp.Expression.MainNode = LastResult.Expression.MainNode.TryVariation()
  81.             Temp.Fitness = Engine.EvaluateFitness(Temp)
  82.  
  83.             If Temp.Fitness < LastResult.Fitness Then
  84.                 txtResult.Text = Temp.Expression.ToString()
  85.                 lblError.Text = "Errore: " & Temp.Fitness
  86.                 LastResult = Temp
  87.             End If
  88.  
  89.             If Temp.Fitness = 0 Then
  90.                 txtResult.Text = Temp.Expression.MainNode.Simplify().ToString()
  91.                 MessageBox.Show("Il programma ha trovato la soluzione perfetta!", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Information)
  92.                 [Stop] = True
  93.             End If
  94.  
  95.             Index += 1
  96.             Application.DoEvents()
  97.         Loop Until [Stop]
  98.  
  99.         btnStop.Enabled = False
  100.         [Stop] = False
  101.     End Sub
  102.  
  103.     Private Sub btnEvaluate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEvaluate.Click
  104.         Try
  105.             Dim Evaluator As Object = Globals.CreateEvaluator(txtResult.Text)
  106.  
  107.             dgvEvaluatedData.Rows.Clear()
  108.             For Each R As DataGridViewRow In dgvData.Rows
  109.                 If R.Index = dgvData.Rows.Count - 1 Then
  110.                     Exit For
  111.                 End If
  112.                 Dim Value As Double = CDbl(R.Cells(0).Value)
  113.                 dgvEvaluatedData.Rows.Add(Value, Globals.Evaluate(Evaluator, Value))
  114.             Next
  115.         Catch Ex As Exception
  116.             MessageBox.Show("Espressione non valida!", Me.Text, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
  117.         End Try
  118.     End Sub
  119. End Class