Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> minmax 
:(
    Опции темы
kostay
Дата 2.12.2008, 03:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 16.5.2007

Репутация: нет
Всего: нет



может ктонибудь посмотреть, почему вся вот ета галиматья не пашет?
уте4ки памети меня не волнуют, 
у меня мин всегда -573 если глубина 7, ели 6, то макс всгда -101

asema - доска
siirto - ход
siirra - ходи
annaArvio - оцени

Код

Siirto* Generaattori::MiniMax(Asema* a, int d) {
    Asema* asema = new Asema(*a);
    Siirto* parasSiirto = NULL;
    depth = d;
    int value;
    int maxValue = -10000;
    SiirtoLista* s = new SiirtoLista(asema);

    for(int i=0; i<s->getSiirrot().size(); i++) {
        Siirto* siirto = s->getSiirrot().at(i);
        asema->siirra (siirto->getMistaX(), siirto->getMistaY(), siirto->getMihinX(), siirto->getMihinY());
        value = minMove (asema, 1, -10000, 10000);

        if (value > maxValue) {
            maxValue = value;
            parasSiirto = siirto;
        }
        if(parasSiirto==NULL)
            parasSiirto = siirto;
    }
    return parasSiirto;
}
  
int Generaattori::maxMove (Asema* a, int d, int alpha, int beta){
    Asema* asema = new Asema(*a);

    if (asema->isPeli()==false || d==depth)
        return eva->annaArvio(asema);
    
    int maxValue = 0;
    int value;
    
    SiirtoLista* s = new SiirtoLista(asema);
    
    for(int i=0; i<s->getSiirrot().size(); i++){
        Siirto* siirto = s->getSiirrot().at(i);
        asema->siirra (siirto->getMistaX(), siirto->getMistaY(), siirto->getMihinX(), siirto->getMihinY());
        value = minMove (asema, d+1, alpha, beta);
        std::cout<<"\nMin"<<value<<"\n";

        /*if (value > maxValue) {
            maxValue = value;
        }*/
        if (value > alpha) {
            alpha = value;
        }

        if (alpha > beta) {
            return beta;
        }
    }
    return alpha;
}


int Generaattori::minMove (Asema* a, int d, int alpha, int beta){
    Asema* asema = new Asema(*a);
    
    if (asema->isPeli()==false || d==depth)
        return eva->annaArvio(asema);

    int minValue = 0;
    int value;
    
    SiirtoLista* s = new SiirtoLista(asema);
    
    
    for(int i=0; i<s->getSiirrot().size(); i++){
        Siirto* siirto = s->getSiirrot().at(i);
        asema->siirra (siirto->getMistaX(), siirto->getMistaY(), siirto->getMihinX(), siirto->getMihinY());
        value = maxMove (new Asema(*asema), d+1, alpha, beta);
        std::cout<<"\nMax"<<value<<"\n";

        /*if (value > minValue) {
            minValue = value;
        }*/
        if (value < beta) {
            beta = value;
        }

        if (beta < alpha) {
            return alpha;
        }
    }
    return beta;
}


а вот оценка
Код


int Evaluointi::annaArvio(Asema* asema) {
    int colorKing;
    int enemy, enemyKing;
    int color;

    if (asema->getSiirtoVuoro()==1) {
        color = 1;
        colorKing = 3;
        enemy = 2;
        enemyKing = 4;
    }
    else {
        color=2;
        colorKing = 4;
        enemy = 1;
        enemyKing = 3;
    }

    int colorForce = 0;
    int enemyForce = 0;

    int** _lauta = asema->getAsema();

    for (int i = 0; i < 8;  i++) { 
        for (int j = 0; j < 8;  j++) {
            if(_lauta[i][j] != -1)
                if (_lauta[i][j] == color || _lauta[i][j] == colorKing)
                    colorForce += calculateValue (_lauta[i][j], i, j);
                else
                    enemyForce += calculateValue (_lauta[i][j], i, j);
        }
    }

    return colorForce - enemyForce;
}

int Evaluointi::calculateValue (int piece, int posi, int posj) {
       int value;

       if (piece == 1 )
           if (posi >= 4 && posi <= 7)
               value = 7;
           else
               value = 5;
       else if (piece != 2) 
           if (posi >= 0 && posi <= 3)
               value = 7;
           else
               value = 5;
       else
           value = 10;

       return value * _weight[posi][posj];
   }



вобшем мы как будто в поддавки играем получается, хотя не все ходы глупые
уже кучу времени убил...
PM MAIL   Вверх
Lycifer
Дата 2.12.2008, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 144
Регистрация: 4.11.2007

Репутация: нет
Всего: нет



Мне кажется по этому:  100111000110011100110100110000111100011100000001111000111 
PM MAIL ICQ   Вверх
kostay
Дата 2.12.2008, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 16.5.2007

Репутация: нет
Всего: нет



да всё же понятно, запускаю минмакс, он рекурсивно запускает то мин то макс, ето стандартный алгоритм

вот отка что за фигня у меня происходит

комп должен просчитывать 6 ходов вперёд, тогда мин всегда одно и тоже значение
если на 7 ходов вперёд то макс одно и тоже зна4ение все ходы, макс ето свой ход тоесть компа, мин ето ход соперника, тобиш меня
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0618 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.