|
LET t0=TIME
RANDOMIZE
DECLARE EXTERNAL FUNCTION AP
DECLARE EXTERNAL FUNCTION TOP
DIM IN(1 TO 18,1 TO 10) !10個体を準備11から18は子孫
DIM CIN(1 TO 18,1 TO 10)
DIM INA(1 TO 18) !個体の評価値
FOR i=1 TO 10 !20個体をランダムに作成
FOR n=1 TO 10
LET IN(i,n)=INT(RND*2)
NEXT N
LET INA(i)=AP(IN,i)
NEXT i
FOR i=1 TO 10000 !世代数
!交叉
LET A=INT((TOP(INA)/100))
LET B=TOP(INA)-INT((TOP(INA)/100))*100
FOR t=1 TO 4
FOR n=1 TO 10
LET IN(10+2*t-1,n)=IN(A,n)
LET IN(10+2*t,n)=IN(B,n)
NEXT n
FOR n=1 TO 10
IF RND>0.9 THEN
LET IN(10+2*t-1,n)=IN(10+2*t-1,n)+IN(10+2*t,n)
LET IN(10+2*t,n)=IN(10+2*t-1,n)-IN(10+2*t,n)
LET IN(10+2*t-1,n)=IN(10+2*t-1,n)-IN(10+2*t,n)
END IF
NEXT n
NEXT t
FOR n=1 TO 10
LET CIN(1,n)=IN(A,n)
LET CIN(2,n)=IN(B,n)
NEXT n
FOR t=3 TO 10
FOR n=1 TO 10
LET CIN(t,n)=IN(t+8,n)
NEXT n
NEXT t
FOR t=1 TO 10 !IN書き出し&突然変異
FOR n=1 TO 10
IF RND>0.05 THEN
LET IN(t,n)=CIN(t,n)
ELSE
LET IN(t,n)=1-CIN(t,n)
END IF
NEXT n
NEXT t
FOR t=1 TO 10
LET INA(t)=AP(IN,t)
NEXT t
NEXT i
LET P1=INT((TOP(INA)/100))
PRINT INA(P1)
PRINT time-t0
END
EXTERNAL FUNCTION AP(IN(,),i) !個体評価
DEF f(x)=SIN(3*x)+0.5*SIN(9*x)+SIN(15*x+50)
FOR n=0 TO 9
LET T=IN(i,n+1)
LET m=m+T*2^n
NEXT n
LET AP=f(m/1023)
END FUNCTION
EXTERNAL FUNCTION TOP(INA()) !優秀な個体の検索,返り値は配列番号0102見たいに上位2桁から一番
LET NO1=-10 !評価値の最低値以下の値
LET NO2=-10 !評価値の最低値以下の値
FOR i=1 TO 10
IF NO1<INA(i) THEN
LET NO1=INA(i)
LET TNO1=i
END IF
NEXT i
FOR i=1 TO 10
IF NO2<INA(i) AND i<>TNO1 THEN
LET NO2=INA(i)
LET TNO2=i
END IF
NEXT I
LET TOP=TNO1*100+TNO2
END FUNCTION
|
|