Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 16:46 15.07.25 
Клубове/ Компютри и Интернет / Програмисти Пълен преглед*
Информация за клуба
Тема Аз това предлагам. [re: wiz]
Автор Гoйko (индианец)
Публикувано29.07.09 12:51  



#include <mem.h>
#include <time.h>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

struct Action{
int remove;
int move;
int to;
};

const int POPULATION_SIZE = 50;

const int CHROMOSOME_SIZE = 10000;

const int FIELD_WIDTH = 1000;

const int FIELD_HEIGHT = 50;

const int ORDER_LENGTH = FIELD_WIDTH*FIELD_HEIGHT;

struct Action population[ POPULATION_SIZE ][ CHROMOSOME_SIZE ];

double fitness[ POPULATION_SIZE ];

int fieldWidth;
int fieldHeight;
int differentNumbers;
double movesImportance;
double ditanceImportance;

int field[ FIELD_WIDTH][ FIELD_HEIGHT];

int order[ ORDER_LENGTH ];

int testField[ FIELD_WIDTH][ FIELD_HEIGHT];

int levels[ FIELD_WIDTH];

FILE *out;

void random(){
int p, i;

for(p=0; p<POPULATION_SIZE; p++){
for(i=0; i<CHROMOSOME_SIZE; i++){
population[ p][ i].remove = rand();
population[ p][ i].move = rand();
population[ p][ i].to = rand();
}

fitness[ p ] = RAND_MAX;
}
}

void select(int &c, int &a, int &b){
static const int BEST = 10;
static const int MIDDLE = 35;
static const int WORST = 55;

int swap;

int select = rand() % (WORST+MIDDLE+BEST);

do{
c = rand() % POPULATION_SIZE;
a = rand() % POPULATION_SIZE;
b = rand() % POPULATION_SIZE;
}while(a==b || b==c || a==c);

if(select < WORST){
if(fitness[ a] > fitness[ c]){
swap = a;
a = c;
c = swap;
}
if(fitness[ b] > fitness[ c]){
swap = b;
b = c;
c = swap;
}
}else if(select < WORST+MIDDLE){
if(fitness[ a] > fitness[ c]){
swap = a;
a = c;
c = swap;
}
if(fitness[ b] > fitness[ c]){
swap = b;
b = c;
c = swap;
}

swap = a;
a = c;
c = swap;
}else if(select < WORST+MIDDLE+BEST){
if(fitness[ a] < fitness[ c]){
swap = a;
a = c;
c = swap;
}
if(fitness[ b] < fitness[ c]){
swap = b;
b = c;
c = swap;
}
}
}

void crossover(int c, int a, int b){
int i, r;

r = rand()%(CHROMOSOME_SIZE + 1);

memcpy(population[ c], population[ a], sizeof(Action)*r);
memcpy(population[ c]+r, population[ b]+r, sizeof(Action)*(CHROMOSOME_SIZE-r));
/*
for(i=0; i<r; i++){
population[ c][ i] = population[ a][ i];
}
for(i=r; i<CHROMOSOME_SIZE; i++){
population[ c][ i] = population[ b][ i];
}
/**/
}

void mutate(int c){
int r = rand() % CHROMOSOME_SIZE;

population[ c][ r].remove = rand();
population[ c][ r].move = rand();
population[ c][ r].to = rand();
}

int availableToRemove(int o){
int i;
int result = 0;

for(i=0; i<fieldWidth; i++){
if(testField[ i][ levels[ i]-1] == order[ o]){
result++;
}
}

return( result );
}

void removeAtIndex(int o, int n){
int i;

for(i=0; i<fieldWidth; i++){
if(testField[ i][ levels[ i]-1] == order[ o]){
if(n == 0){
testField[ i ][ levels[ i]-1 ] = 0;
levels[ i ]--;
return;
}

n--;
}
}
}

bool moveFromTo(int c, int fromIndex, int toIndex){
if(fromIndex==toIndex || levels[ toIndex]>=FIELD_HEIGHT || levels[ fromIndex]<=0){
return( false );
}else{
fitness[ c ] += movesImportance;

fitness[ c ] += ditanceImportance*sqrt((fromIndex-toIndex)*(fromIndex-toIndex)+(levels[ fromIndex]-levels[ toIndex])*(levels[ fromIndex]-levels[ toIndex]));

testField[ toIndex][ levels[ toIndex]] = testField[ fromIndex][ levels[ fromIndex]-1];
testField[ fromIndex][ levels[ fromIndex]-1] = 0;
levels[ toIndex]++;
levels[ fromIndex]--;

return( true );
}
}

void printField(int field[ FIELD_WIDTH][ FIELD_HEIGHT]){
int i, j;

fprintf(out, "\n");
for(j=0; j<fieldHeight; j++){
for(i=0; i<fieldWidth; i++){
fprintf(out, "%d ", field[ i][ j]);
}
fprintf(out, "\n");
}
}

void stamina(int c, bool print=false){
int i, j, o;

int emptyCells = 0;

int doActionIndex;

fitness[ c ] = 0;

memcpy(testField, field, sizeof(int)*FIELD_WIDTH*FIELD_HEIGHT);
for(i=0; i<fieldWidth; i++){
levels[ i ] = fieldHeight;
}

if( print ){
printField(testField);
}
for(o=0, doActionIndex=0; emptyCells<fieldWidth*fieldHeight&&doActionIndex<CHROMOSOME_SIZE; ){
static bool done = false;

int available = availableToRemove( o );

if(emptyCells==0 && available==0){
fitness[ c ] = RAND_MAX;
return;
}else if(available > 0){
done = true;
if(print==true && done==true){
fprintf(out, "\nRemove %d:", order[ o]);
}

removeAtIndex(o, population[ c][ doActionIndex].remove % available);
doActionIndex++;
emptyCells++;
o++;
}else if(available == 0){
done = moveFromTo(c, population[ c][ doActionIndex].move%fieldWidth, population[ c][ doActionIndex].to%fieldWidth);

if(print==true && done==true){
fprintf(out, "\nMove from %d to %d:", population[ c][ doActionIndex].move%fieldWidth, population[ c][ doActionIndex].to%fieldWidth);
}

doActionIndex++;
}

if(print==true && done==true){
printField(testField);
}
}

if(emptyCells < fieldWidth*fieldHeight){
fitness[ c ] = RAND_MAX;
}

if( print ){
fprintf(out, "\nTotal cost: %lf\n", fitness[ c]);
}
}

void evolve(){
int p;
int c, a, b;

for(p=0; p<POPULATION_SIZE; p++){
select(c, a, b);
crossover(c, a, b);
mutate( c );
stamina( c );
}
}

int bestFitnessIndex(){
int p;
int index = 0;

for(p=0; p<POPULATION_SIZE; p++){
if(fitness[ p] < fitness[ index]){
index = p;
}
}

return( index );
}

int main(int argc, char **argv){
FILE *in;

int i, j;

srand( time(NULL) );

in = fopen(argv[ 1], "rt");
fscanf(in, "%d %d %d %lf %lf", &fieldWidth, &fieldHeight, &differentNumbers, &movesImportance, &ditanceImportance);
for(j=0; j<fieldHeight; j++){
for(i=0; i<fieldWidth; i++){
fscanf(in, "%d", &field[ i][ j]);
}
}
for(i=0; i<fieldWidth*fieldHeight; i++){
fscanf(in, "%d", &order[ i]);
}
fclose( in );

movesImportance /= 100.0;
ditanceImportance /= 100.0;

out = fopen(argv[ 2], "wt");
printf( "Press any key to stop ..." );

random();
while( !kbhit() ){
evolve();
}
stamina(bestFitnessIndex(), true);
fclose( out );

return( 0 );
}



Цялата тема
ТемаАвторПубликувано
* Задачка за оптимизация Kikimorchence   22.07.09 00:56
. * Re: Задачка за оптимизация Todor Balabanov   22.07.09 10:06
. * Re: Задачка за оптимизация Kikimorchence   22.07.09 11:40
. * Re: Задачка за оптимизация Гoйko   22.07.09 17:48
. * Re: Задачка за оптимизация BlGBUGEX   24.07.09 12:57
. * Re: Задачка за оптимизация Гoйko   22.07.09 17:37
. * Re: Задачка за оптимизация Kikimorchence   22.07.09 18:51
. * Re: Задачка за оптимизация Гoйko   22.07.09 20:26
. * Re: Задачка за оптимизация Kikimorchence   23.07.09 12:28
. * Re: Задачка за оптимизация Гoйko   23.07.09 13:37
. * Re: Задачка за оптимизация Kikimorchence   23.07.09 15:22
. * Re: Задачка за оптимизация zaphod   23.07.09 18:33
. * Re: Задачка за оптимизация Гoйko   23.07.09 19:04
. * Re: Задачка за оптимизация Eвлaмпи Пoпдимитpoв   23.07.09 23:58
. * Re: Задачка за оптимизация Kikimorchence   24.07.09 09:51
. * Re: Задачка за оптимизация Joro_M   24.07.09 10:52
. * Re: Задачка за оптимизация Kikimorchence   24.07.09 11:05
. * Re: Задачка за оптимизация Гoйko   24.07.09 11:10
. * Re: Задачка за оптимизация Joro_M   24.07.09 12:38
. * напротив zaphod   25.07.09 06:55
. * Re: Задачка за оптимизация Гoйko   23.07.09 21:15
. * Re: Задачка за оптимизация Kikimorchence   24.07.09 09:38
. * Re: Задачка за оптимизация Bezbojnika   24.07.09 10:46
. * Re: Задачка за оптимизация Гoйko   24.07.09 11:14
. * Re: Задачка за оптимизация moreol   24.07.09 12:03
. * Re: Задачка за оптимизация wiz   24.07.09 13:04
. * Re: Задачка за оптимизация Kikimorchence   24.07.09 13:47
. * Re: Задачка за оптимизация Гoйko   24.07.09 15:26
. * Re: Задачка за оптимизация Kikimorchence   24.07.09 18:59
. * Re: Задачка за оптимизация Гpиro   24.07.09 19:32
. * Re: Задачка за оптимизация Kikimorchence   24.07.09 19:37
. * Re: Задачка за оптимизация zaphod   25.07.09 07:06
. * Re: Задачка за оптимизация Гpиro   25.07.09 11:09
. * SQL? wiz   25.07.09 11:54
. * Re: SQL? Гpиro   25.07.09 14:00
. * Re: SQL? Tweeg   26.07.09 14:03
. * Re: SQL? wiz   28.07.09 10:09
. * Re: SQL? zaphod   28.07.09 13:09
. * крокодил в къщи? wiz   28.07.09 13:26
. * Re: крокодил в къщи? zaphod   29.07.09 08:43
. * Re: крокодил в къщи? wiz   29.07.09 14:26
. * Re: крокодил в къщи? zaphod   29.07.09 14:50
. * Re: крокодил в къщи? wiz   29.07.09 15:15
. * Re: крокодил в къщи? Гoйko   29.07.09 15:26
. * нещо се бъркаш wiz   29.07.09 16:02
. * Re: нещо се бъркаш Гoйko   29.07.09 16:46
. * браво wiz   29.07.09 16:53
. * Re: браво bira_more   29.07.09 16:56
. * Re: браво wiz   29.07.09 16:59
. * Re: браво bira_more   29.07.09 17:05
. * Re: браво wiz   29.07.09 17:08
. * Re: браво bira_more   29.07.09 17:09
. * Re: браво wiz   29.07.09 17:11
. * Re: браво bira_more   29.07.09 17:14
. * Не лъжи bira_more   29.07.09 17:10
. * Re: Не лъжи wiz   29.07.09 17:11
. * Re: Не лъжи bira_more   29.07.09 17:13
. * Re: Не лъжи wiz   29.07.09 17:16
. * Re: Не лъжи bira_more   29.07.09 17:21
. * Re: Не лъжи wiz   29.07.09 17:24
. * Re: Не лъжи bira_more   29.07.09 23:00
. * Re: Не лъжи Гoйko   29.07.09 22:16
. * браво wiz   29.07.09 23:27
. * Re: браво Гoйko   29.07.09 23:41
. * Re: браво wiz   29.07.09 23:46
. * Re: браво bira_more   29.07.09 23:54
. * Re: браво Гoйko   30.07.09 00:37
. * Re: браво Гoйko   29.07.09 22:14
. * Re: браво Гoйko   29.07.09 22:12
. * Re: браво Гoйko   29.07.09 17:01
. * Re: браво wiz   29.07.09 17:06
. * Re: браво bira_more   29.07.09 17:12
. * нали точно ти ще кажеш wiz   29.07.09 17:14
. * Re: нали точно ти ще кажеш bira_more   29.07.09 17:23
. * Re: нали точно ти ще кажеш wiz   29.07.09 17:25
. * Re: нали точно ти ще кажеш bira_more   29.07.09 23:01
. * приятно писане без мен wiz   29.07.09 23:21
. * Re: приятно писане без мен bira_more   29.07.09 23:51
. * Re: приятно писане без мен wiz   29.07.09 23:57
. * Re: приятно писане без мен bira_more   30.07.09 00:16
. * Re: приятно писане без мен wiz   30.07.09 09:31
. * изписа море от глупости zaphod   30.07.09 09:41
. * Re: изписа море от глупости wiz   30.07.09 10:51
. * Re: изписа море от глупости bira_more   30.07.09 12:46
. * Re: изписа море от глупости .mono.   30.07.09 13:30
. * Re: изписа море от глупости bira_more   30.07.09 13:36
. * бира пак лъжеш wiz   30.07.09 18:37
. * Re: бира пак лъжеш bira_more   30.07.09 21:14
. * Re: бира пак лъжеш wiz   30.07.09 21:28
. * Re: бира пак лъжеш bira_more   30.07.09 22:49
. * бира стига писа глупости wiz   31.07.09 07:10
. * Re: бира стига писа глупости bira_more   31.07.09 16:33
. * бира пак лъжеш wiz   31.07.09 16:43
. * Я си прочети собствените тъпотии bira_more   31.07.09 20:30
. * Re: Я си прочети собствените тъпотии wiz   31.07.09 23:10
. * Re: Я си прочети собствените тъпотии bira_more   31.07.09 23:49
. * пак написа глупости wiz   01.08.09 00:11
. * Re: пак написа глупости bira_more   01.08.09 00:32
. * пак глупости wiz   01.08.09 01:20
. * Re: пак глупости bira_more   01.08.09 10:21
. * Re: пак глупости wiz   01.08.09 11:00
. * Re: пак глупости bira_more   01.08.09 11:39
. * Re: пак глупости wiz   01.08.09 11:46
. * Re: пак глупости bira_more   01.08.09 14:21
. * Re: пак глупости wiz   01.08.09 15:22
. * Re: пак глупости bira_more   01.08.09 21:04
. * Re: пак глупости naja_haje   01.08.09 22:22
. * За боза bira_more   01.08.09 22:45
. * Re: За боза naja_haje   01.08.09 23:12
. * Re: За боза Tony Stewart   01.08.09 23:54
. * Re: За боза Гoйko   01.08.09 23:57
. * Re: За боза naja_haje   02.08.09 00:00
. * Re: За боза Гoйko   02.08.09 10:01
. * Re: пак глупости Гoйko   01.08.09 23:56
. * Re: пак глупости wiz   02.08.09 00:57
. * Re: пак глупости bira_more   02.08.09 01:34
. * Re: пак глупости Гoйko   02.08.09 10:15
. * оффффф пак бози wiz   02.08.09 00:25
. * Re: оффффф пак бози naja_haje   02.08.09 00:38
. * Re: оффффф пак бози wiz   02.08.09 00:54
. * Те ти смислен аргумент bira_more   02.08.09 01:26
. * Re: оффффф пак бози bira_more   02.08.09 01:23
. * Re: оффффф пак бози wiz   02.08.09 01:27
. * Re: оффффф пак бози Гoйko   02.08.09 10:20
. * оффффф пак бози wiz   04.08.09 10:06
. * Re: оффффф пак бози bira_more   04.08.09 13:22
. * Re: оффффф пак бози wiz   04.08.09 15:06
. * Re: оффффф пак бози bira_more   04.08.09 15:18
. * Re: оффффф пак бози wiz   04.08.09 15:47
. * Re: оффффф пак бози bira_more   04.08.09 16:01
. * Re: оффффф пак бози wiz   04.08.09 16:13
. * Re: оффффф пак бози Гoйko   04.08.09 16:47
. * Re: оффффф пак бози wqw   04.08.09 17:38
. * Re: оффффф пак бози bira_more   04.08.09 18:52
. * Re: оффффф пак бози wiz   05.08.09 09:56
. * Re: оффффф пак бози Гoйko   05.08.09 11:06
. * Re: оффффф пак бози wiz   05.08.09 12:07
. * А така bira_more   05.08.09 12:48
. * Re: оффффф пак бози bira_more   05.08.09 12:52
. * Re: оффффф пак бози wiz   05.08.09 13:23
. * Re: оффффф пак бози bira_more   05.08.09 14:02
. * Re: оффффф пак бози Joro_M   05.08.09 18:22
. * Re: оффффф пак бози Tony Stewart   05.08.09 18:43
. * Re: оффффф пак бози bira_more   05.08.09 19:05
. * Re: оффффф пак бози wiz   06.08.09 11:00
. * Re: оффффф пак бози bira_more   06.08.09 18:04
. * Re: оффффф пак бози .mono.   05.08.09 10:16
. * Re: оффффф пак бози wqw   05.08.09 12:43
. * Re: оффффф пак бози bira_more   04.08.09 18:50
. * Re: оффффф пак бози wiz   04.08.09 16:23
. * Re: оффффф пак бози Гoйko   04.08.09 16:44
. * Re: оффффф пак бози Гoйko   04.08.09 14:53
. * Re: оффффф пак бози Гoйko   02.08.09 10:12
. * Re: бира пак лъжеш Гoйko   31.07.09 11:26
. * кво се правиш? wiz   31.07.09 12:50
. * Re: приятно писане без мен bira_more   30.07.09 12:44
. * Re: приятно писане без мен Гoйko   30.07.09 00:40
. * Re: браво Гoйko   29.07.09 22:13
. * Аз това предлагам. Гoйko   29.07.09 12:51
. * Re: Задачка за оптимизация 6aй xyй   25.07.09 11:57
. * Re: Задачка за оптимизация endosteum   25.07.09 17:29
. * Re: Задачка за оптимизация zaphod   25.07.09 21:34
. * Re: Задачка за оптимизация endosteum   25.07.09 22:35
. * Re: Задачка за оптимизация Пaньo Дoнeв   28.07.09 07:52
. * Re: Задачка за оптимизация Eвлaмпи Пoпдимитpoв   28.07.09 23:55
. * Re: Задачка за оптимизация moreol   24.07.09 16:23
. * Програма за генериране на тестове. Гoйko   24.07.09 16:51
. * Re: Задачка за оптимизация _edin_   24.07.09 20:44
. * от цялата работа ... Tweeg   26.07.09 13:57
. * Re: от цялата работа ... Joro_M   26.07.09 16:44
. * Re: от цялата работа ... zaphod   26.07.09 17:31
. * Re: от цялата работа ... Tweeg   26.07.09 17:34
. * Re: от цялата работа ... Joro_M   26.07.09 18:14
. * Re: от цялата работа ... headhunter   30.07.09 15:20
. * Re: Задачка за оптимизация Лaнc Линk - тaйният areнт   29.07.09 16:44
. * Re: Задачка за оптимизация Гoйko   29.07.09 17:00
. * Re: Задачка за оптимизация Лaнc Линk - тaйният areнт   30.07.09 18:20
. * Re: Задачка за оптимизация Гoйko   30.07.09 19:19
. * Re: Задачка за оптимизация Лaнc Линk - тaйният areнт   31.07.09 13:46
. * Re: Задачка за оптимизация Гoйko   31.07.09 14:19
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2025 Dir.bg Всички права запазени.