| В качестве извинений за отобранное время |
Mar. 1st, 2007|01:54 pm |
Прстая Java-версия того же кода, без GUI и записи статистики (все результаты валят в консоль), но это можно прикрутить при потребности. Кстати кажется результаты не репродюсаются.
(В коде в комментах куски оригинального кода и это все выглядит жутко здесь, но в Эклипсе при подсветке синтаксиса читаемость нормальная)
import java.util.Random;
/*
10 REM Модель генетической эволюции - одномерный клеточный автомат GEMOCA
15 REM Дима Даннер, 2007
*/
public class GEM {
public static void main(String[] args) {
/*
* 20 REM объявление и установка параметров (см.описание модели)
* 22 coevol=0.02: REM коэффициент эволюции
* 25 cell=0: REM текущая клетка
* 30 color=0: colors=1: REM параметры текущего цвета и сложности программы
* 40 noise=0.1: REM физическая вероятность ошибки
* 50 cycle=0: REM счетчик циклов
* 60 repro=0: REM счетчик успешных воспроизведений
* 71 error=0: REM флаг ошибки
* 80 corepro=0: REM коэффициент воспроизведения
* 85 REM здесь обявляются массивы для сбора статистики
*/
double cEvol=0.02; // DD: коэффициент эволюции SR: что бы это могло означать?..
int color=0; // DD: параметры текущего цвета SR: какие такие параметры? это текущий цвет,
// (или его идентификатор - как хотите), но никакие не параметры
int nColors=1; // DD: и сложности программы
double cNoise=0.1; // DD: физическая вероятность ошибки SR: занятный термин "физическая вероятность"
int nCycle; // DD: счетчик циклов
int nSucRep=0; // DD: счетчик успешных воспроизведений
// boolean fError=false; // DD: флаг ошибки
double cRepro=0; // DD: коэффициент воспроизведения
double eLif=0.5; // SR: требуемый порог выживаемости
int tnCycle=4000000; // SR: Количество циклов, которое нужно выполнить
Random rnd=new Random();
// int colored[]=new int[tnCycle]; // SR: Массив сгенерированных значений "цвета"
// int numcols[]=new int[tnCycle]; // SR: Кол-во цветов (слоэность)
// double ssrates[]=new double[tnCycle]; // SR: % успешных "репликаций"
for(nCycle=0;nCycle[ Error: Irreparable invalid markup ('<tncycle;ncycle++)>') in entry. Owner must fix manually. Raw contents below.] Прстая Java-версия того же кода, без GUI и записи статистики (все результаты валят в консоль), но это можно прикрутить при потребности. Кстати кажется результаты не репродюсаются.
(В коде в комментах куски оригинального кода и это все выглядит жутко здесь, но в Эклипсе при подсветке синтаксиса читаемость нормальная)
<pre> import java.util.Random;
/* 10 REM Модель генетической эволюции - одномерный клеточный автомат GEMOCA 15 REM Дима Даннер, 2007 */
public class GEM { public static void main(String[] args) { /* * 20 REM объявление и установка параметров (см.описание модели) * 22 coevol=0.02: REM коэффициент эволюции * 25 cell=0: REM текущая клетка * 30 color=0: colors=1: REM параметры текущего цвета и сложности программы * 40 noise=0.1: REM физическая вероятность ошибки * 50 cycle=0: REM счетчик циклов * 60 repro=0: REM счетчик успешных воспроизведений * 71 error=0: REM флаг ошибки * 80 corepro=0: REM коэффициент воспроизведения * 85 REM здесь обявляются массивы для сбора статистики */ double cEvol=0.02; // DD: коэффициент эволюции SR: что бы это могло означать?.. int color=0; // DD: параметры текущего цвета SR: какие такие параметры? это текущий цвет, // (или его идентификатор - как хотите), но никакие не параметры int nColors=1; // DD: и сложности программы double cNoise=0.1; // DD: физическая вероятность ошибки SR: занятный термин "физическая вероятность" int nCycle; // DD: счетчик циклов int nSucRep=0; // DD: счетчик успешных воспроизведений // boolean fError=false; // DD: флаг ошибки double cRepro=0; // DD: коэффициент воспроизведения double eLif=0.5; // SR: требуемый порог выживаемости int tnCycle=4000000; // SR: Количество циклов, которое нужно выполнить Random rnd=new Random();
// int colored[]=new int[tnCycle]; // SR: Массив сгенерированных значений "цвета" // int numcols[]=new int[tnCycle]; // SR: Кол-во цветов (слоэность) // double ssrates[]=new double[tnCycle]; // SR: % успешных "репликаций" for(nCycle=0;nCycle<tnCycle;nCycle++) { /* * 90 REM ** ГЛАВНЫЙ ЦИКЛ ** * 95 REM ВОСПРОИЗВЕДЕНИЕ * 100 cycle=cycle+1 * 110 color=color+1: IF color>colors THEN color=1: error=0: REM следующий цвет * 120 x=RND: IF x<noise THEN error=1: REM ошибка с вероятностью noise * 130 cell=color: IF error=1 THEN cell=INT (RND*colors)+1: color=cell * 140 IF color=colors AND error=0 THEN repro=repro+1: REM успешное воспроизведение * 146 LET corepro=repro/cycle: REM подсчет коэффициента воспроизведения
* 147 REM МУТАЦИЯ (см. описание модели) * 150 LET x=RND: REM проверка условия усложнения программы * 160 IF x<coevol/4 AND corepro>0.5 THEN colors=colors+1: REM усложнение программы * 170 IF corepro<0.5-(colors-1)*coevol THEN colors=colors-1: REM упрощение программы - отбор * 180 IF colors=0 THEN colors=1
* 185 REM ** КОНЕЦ ГЛАВНОГО ЦИКЛА ** * */ if(++color>nColors) { color=1; // SR: почему не color=0 ? // fError=false; } if(rnd.nextDouble()<cNoise) // if(fError) { color=(int)rnd.nextDouble()*nColors; // fError=true; // System.out.println("Colors = "+nColors+"; Generated: "+colored[nCycle]); } else if(color==nColors) { nSucRep++; } // colored[nCycle]=color; // SR: Мы записываем в colored значения, которые никогда не читаем cRepro=((double)nSucRep)/(nCycle+1); if(rnd.nextDouble()<(cEvol/4) // SR: почему cEvol/4 ? && cRepro>eLif) nColors++; if(cRepro<eLif-(nColors-1)*cEvol && nColors>1) nColors--; </pre> *cut due to char count limit for commetn* |
|