Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
|
|
@ -0,0 +1,91 @@
|
|||
bundle Default {
|
||||
class Evolutionary {
|
||||
target : static : String;
|
||||
possibilities : static : Char[];
|
||||
C : static : Int;
|
||||
minMutateRate : static : Float;
|
||||
perfectFitness : static : Int;
|
||||
parent : static : String ;
|
||||
rand : static : Float;
|
||||
|
||||
function : Init() ~ Nil {
|
||||
target := "METHINKS IT IS LIKE A WEASEL";
|
||||
possibilities := "ABCDEFGHIJKLMNOPQRSTUVWXYZ "->ToCharArray();
|
||||
C := 100;
|
||||
minMutateRate := 0.09;
|
||||
perfectFitness := target->Size();
|
||||
}
|
||||
|
||||
function : fitness(trial : String) ~ Int {
|
||||
retVal := 0;
|
||||
|
||||
each(i : trial) {
|
||||
if(trial->Get(i) = target->Get(i)) {
|
||||
retVal += 1;
|
||||
};
|
||||
};
|
||||
|
||||
return retVal;
|
||||
}
|
||||
|
||||
function : newMutateRate() ~ Float {
|
||||
x : Float := perfectFitness - fitness(parent);
|
||||
y : Float := perfectFitness->As(Float) * (1.01 - minMutateRate);
|
||||
|
||||
return x / y;
|
||||
}
|
||||
|
||||
function : mutate(parent : String, rate : Float) ~ String {
|
||||
retVal := "";
|
||||
|
||||
each(i : parent) {
|
||||
rand := Float->Random();
|
||||
if(rand <= rate) {
|
||||
rand *= 1000.0;
|
||||
intRand := rand->As(Int);
|
||||
index : Int := intRand % possibilities->Size();
|
||||
retVal->Append(possibilities[index]);
|
||||
}
|
||||
else {
|
||||
retVal->Append(parent->Get(i));
|
||||
};
|
||||
};
|
||||
|
||||
return retVal;
|
||||
}
|
||||
|
||||
function : Main(args : String[]) ~ Nil {
|
||||
Init();
|
||||
parent := mutate(target, 1.0);
|
||||
|
||||
iter := 0;
|
||||
while(target->Equals(parent) <> true) {
|
||||
rate := newMutateRate();
|
||||
iter += 1;
|
||||
|
||||
if(iter % 100 = 0){
|
||||
IO.Console->Instance()->Print(iter)->Print(": ")->PrintLine(parent);
|
||||
};
|
||||
|
||||
bestSpawn : String;
|
||||
bestFit := 0;
|
||||
|
||||
for(i := 0; i < C; i += 1;) {
|
||||
spawn := mutate(parent, rate);
|
||||
fitness := fitness(spawn);
|
||||
|
||||
if(fitness > bestFit) {
|
||||
bestSpawn := spawn;
|
||||
bestFit := fitness;
|
||||
};
|
||||
};
|
||||
|
||||
if(bestFit > fitness(parent)) {
|
||||
parent := bestSpawn;
|
||||
};
|
||||
};
|
||||
parent->PrintLine();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue