Skarso
Forumer attivo
e questa invece è la routine FINDBESTX1 dove viene esaminato ogni cromosoma per sciegliere e quello che ha dato i risultati migliori da utilizzare per la previsione del giorno “k” e i primi 10 ( Limeio ) che serviranno per la prossima generazione
tutti questi codici sono più facilmente comprensibili esaminando i 2 esempi a cui sono stati applicati PROVA-GA-F1 e PROVA-GA-FI-1 caricati e disponibili come al solito su Dropbox
nel Foglio1 di questi files è presente un cpontrollo ( numcro ) mediante il quale si può scegliere il numero di individui della popolazione secondo la potenza del vostro PC
ovviamente si sconsiglia vivamente di usare questi sistemi perchè potrebbe essere pericoloso, bla bla bla etc
Codice:
Ultimo = k
'
best(0) = Bestz
Best2 = -999
'
For r = 1 To Ncromo
cumx = 0
' recupera dist1 e dist2 dal cromosoma r-simo
S = Tabcromo(r)
cromo1 = Left(S, LLvar1)
T = Left(S, LLvar1 + LLvar2)
cromo2 = Right(T, LLvar2)
dist1 = 0.5 + 0.05 * Convtodec(cromo1, LLvar1)
dist2 = 0.5 + 0.05 * Convtodec(cromo2, LLvar2)
'
' recupera le rules dal cromosoma r-simo
j = 0
For i = 1 To LLvar3 Step 2
j = j + 1
rule(j) = 1
T = Right(S, LLvar3 - i + 1)
W = Left(T, 1)
rule(j) = rule(j) + Convtodec(W, 1)
T = Right(S, LLvar3 - i)
W = Left(T, 1)
rule(j) = rule(j) + Convtodec(W, 1)
Next i
rule(3) = 2
'
' valorizza i centri dei fuzzy sets
zero = 0: mlow = -dist1: low = mlow - dist2
mhigh = dist1: high = mhigh + dist2
'
' calcola i 5 fuzzy sets
j = 0
For i = Primo To Ultimo - 1
j = j + 1
' FUZZY SET BASSO
If fx(i) <= low Then
basso(j) = 1
ElseIf fx(i) >= mlow Then
basso(j) = 0
Else
basso(j) = 1 - (Abs(fx(i) - low) / Abs(low - mlow))
End If
' FUZZY SET MBASSO
If fx(i) <= low Or fx(i) >= zero Then
mbasso(j) = 0
ElseIf fx(i) < mlow Then
mbasso(j) = 1 - (Abs(fx(i) - mlow) / Abs(mlow - low))
Else
mbasso(j) = 1 - (Abs(fx(i) - mlow) / Abs(mlow - zero))
End If
' FUZZY SET MEDIO
If fx(i) <= mlow Or fx(i) >= mhigh Then
medio(j) = 0
ElseIf fx(i) < zero Then
medio(j) = 1 - (Abs(fx(i) - zero) / Abs(zero - mlow))
Else
mbasso(j) = 1 - (Abs(fx(i) - zero) / Abs(zero - mhigh))
End If
' FUZZY SET MALTO
If fx(i) <= zero Or fx(i) >= high Then
malto(j) = 0
ElseIf fx(i) < mhigh Then
malto(j) = 1 - (Abs(fx(i) - mhigh) / Abs(mhigh - zero))
Else
malto(j) = 1 - (Abs(fx(i) - mhigh) / Abs(mhigh - high))
End If
' FUZZY SET ALTO
If fx(i) <= mhigh Then
alto(j) = 0
ElseIf fx(i) >= high Then
alto(j) = 1
Else
alto(j) = 1 - (Abs(fx(i) - high) / Abs(high - mhigh))
End If
'
' APPLICAZIONE REGOLE X RIEMPIRE INPUTZ()COI RISULTATI ( YIELD2 )
'
If alto(j) > malto(j) And alto(j) > medio(j) And alto(j) > mbasso(j) And alto(j) > basso(j) Then
Select Case rule(5)
Case 1
'Inputz(j) = -Yield2(i)
'best(j) = 1
inputz(j) = 0
best(j) = 2
Case 2
inputz(j) = 0
best(j) = 2
Case 3
inputz(j) = Yield2(i)
best(j) = 3
End Select
ElseIf malto(j) > alto(j) And malto(j) > medio(j) And malto(j) > mbasso(j) And malto(j) > basso(j) Then
Select Case rule(4)
Case 1
'inputz(j) = -Yield2(i)
'best(j) = 1
inputz(j) = 0
best(j) = 2
Case 2
inputz(j) = 0
best(j) = 2
Case 3
inputz(j) = Yield2(i)
best(j) = 3
End Select
ElseIf medio(j) > alto(j) And medio(j) > malto(j) And medio(j) > mbasso(j) And medio(j) > basso(j) Then
Select Case rule(3)
Case 1
inputz(j) = -Yield2(i)
best(j) = 1
Case 2
inputz(j) = 0
best(j) = 2
Case 3
inputz(j) = Yield2(i)
best(j) = 3
End Select
ElseIf mbasso(j) > alto(j) And mbasso(j) > malto(j) And mbasso(j) > medio(j) And mbasso(j) > basso(j) Then
Select Case rule(2)
Case 1
inputz(j) = -Yield2(i)
best(j) = 1
Case 2
inputz(j) = 0
best(j) = 2
Case 3
'inputz(j) = Yield2(i)
'best(j) = 3
inputz(j) = 0
best(j) = 2
End Select
ElseIf basso(j) > alto(j) And basso(j) > malto(j) And basso(j) > medio(j) And basso(j) > mbasso(j) Then
Select Case rule(1)
Case 1
inputz(j) = -Yield2(i)
best(j) = 1
Case 2
inputz(j) = 0
best(j) = 2
Case 3
'inputz(j) = Yield2(i)
'best(j) = 3
inputz(j) = 0
best(j) = 2
End Select
End If
Next i
'
' SCEGLIE FITNESS FUNCTION
Select Case Scelta
Case 1
cumx = Cum(inputz(), j)
Case 2
cumx = Newix(inputz(), j)
Case 3
cumx = Omega(inputz(), j)
Case 4
cumx = Sharpe(inputz(), j)
End Select
'
' ORDINA I CROMOSOMI MIGLIORI
For i = 1 To Nmeio
If cumx = Bestx(i) Then
Exit For
ElseIf cumx > Bestx(i) Then
m = Nmeio
Do While m > i
Bestx(m) = Bestx(m - 1)
Limeio(m) = Limeio(m - 1)
m = m - 1
Loop
Bestx(i) = cumx
Limeio(i) = Tabcromo(r)
'
If i = 1 Then
' CROMOSOMA MIGLIORE
Best1 = r
Best2 = cumx
Best3 = dist1
Best4 = dist2
Bestz = best(j)
For n = 1 To 5
Bestrule(n) = rule(n)
Next n
End If
Exit For
End If
Next i
'
Next r
'
nel Foglio1 di questi files è presente un cpontrollo ( numcro ) mediante il quale si può scegliere il numero di individui della popolazione secondo la potenza del vostro PC
ovviamente si sconsiglia vivamente di usare questi sistemi perchè potrebbe essere pericoloso, bla bla bla etc