Re[16]: Alpha Beta и Reversi.
От: raskin Россия  
Дата: 18.07.05 05:01
Оценка: 3 (1)
Adopt wrote:
> Здравствуйте, raskin, Вы писали:
>
> R>Разные похожие ошибки повторяются иногда. Я к тому же не всегда их
> R>замечаю. А Setup Board, например, здесь нет. Из-за отсутствия истории с
> R>указанием всех ходов и принадлежностей всех клеток после каждого поиск
> R>нестыковок ручной => трудоёмкий. А опыта .jar -> .class -> .java или
> R>писания на Java у меня нет, поэтому самому добавлять мне не хочется.
> R>Если получится могу написать и отладить переворот фишек на Pascal и
> R>отослать вам хоть .exe, хоть ELF (с исходником, не вопрос) — вам какой
> R>формат ближе (я не уверен, что сделаю, но шанс есть)?
>
> Вот новая версия где исправлен баг
> http://rsdn.ru:80/File/39660/ReversiUpd.jar
>
> Здесь все нормально?
>
> история будет выводиться в консоль в следующей версии

Увы, нет. Позиция:


   bw
    www
    wbw
    wwbww
      wb
    bbbbb


в координатах:
s33b
s43w
s44w
s54w
s64w
s45w
s55b
s65w
s46w
s56w
s66b
s76w
s86w
s67w
s77b
s48b
s58b
s68b
s78b
s88b

(это скрипт для программы-проверяльщика, потому и s-set)
Ход:
m85b

Перевернулись по правилам:
76b
67b

Перевернулись не по правилам:
86b

Похоже, у Вас первый/последний пробел в линии её не разрывает изредка.

Код верификатора (консольный на Паскаль; ELF — по просьбе/когда соберусь
выложу архив EXE):
http://rsdn.ru:80/File/40778/reversi_src.zip
http://rsdn.ru:80/File/40778/reversi_elf.zip
Posted via RSDN NNTP Server 2.0 beta
Re[17]: Alpha Beta и Reversi.
От: Adopt  
Дата: 19.07.05 05:41
Оценка:
Здравствуйте, raskin, Вы писали:

R>Adopt wrote:

>> Здравствуйте, raskin, Вы писали:
>>
R>Код верификатора (консольный на Паскаль; ELF — по просьбе/когда соберусь
R>выложу архив EXE):
R>http://rsdn.ru:80/File/40778/reversi_src.zip
R>http://rsdn.ru:80/File/40778/reversi_elf.zip

Спасибо.

Но не очень понятно что делает функция make_move?
она делает ход компьютера?
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[18]: Alpha Beta и Reversi.
От: raskin Россия  
Дата: 19.07.05 07:49
Оценка:
Adopt wrote:
> Здравствуйте, raskin, Вы писали:
>
> R>Adopt wrote:
>> > Здравствуйте, raskin, Вы писали:
>> >
> R>Код верификатора (консольный на Паскаль; ELF — по просьбе/когда соберусь
> R>выложу архив EXE):
> R>http://rsdn.ru:80/File/40778/reversi_src.zip
> R>http://rsdn.ru:80/File/40778/reversi_elf.zip
>
> Спасибо.
>
> Но не очень понятно что делает функция make_move?
> она делает ход компьютера?

Нет. Это же верификатор. Программа работает как доска, ругающаяся при
нарушении правил. Вход описан write_usage, а структура такова:

good_piece — этот символ является чьей-то фишкой
good_field — этот символ может описывать поле

TBoard:
init — заполнить доску пустыми клетками
to_string — строка описания доски
set_field — задать состояние заданной клетки (для установки позиции)
make_move — сделать ход заданной стороны в заданную клетку (с контролем
возможности и переворотами)
num_flip — подсчитать сколько вражеских фишек надо перевернуть вдоль
луча в заданном направлении при ходе в заданную точку
do_flips — перевернуть фишки в условиях предыдущего пункта
make_four — поставить на доске начальную позицию
read_it — считать доску с консоли в кратком формате

do_keyboard_query — запросить и выполнить действие



соответственно, "s62b" поставит чёрную фишку в 6:2, что бы ни стояло на
доске, а "m62b" поставит её туда только если можно, причём сделает
перевороты (тестировал — ошибок не нашёл). Аналогично set_field(6,2,'b')
и make_move(6,2,'b') .
Posted via RSDN NNTP Server 2.0 beta
Re[19]: Alpha Beta и Reversi.
От: Adopt  
Дата: 19.07.05 21:46
Оценка: 6 (1)
Здравствуйте, raskin, Вы писали:

R>Adopt wrote:

>> Здравствуйте, raskin, Вы писали:
>>
>> R>Adopt wrote:
>>> > Здравствуйте, raskin, Вы писали:
>>> >

R>соответственно, "s62b" поставит чёрную фишку в 6:2, что бы ни стояло на

R>доске, а "m62b" поставит её туда только если можно, причём сделает
R>перевороты (тестировал — ошибок не нашёл). Аналогично set_field(6,2,'b')
R>и make_move(6,2,'b') .

Вот новая версия с полностью передаланными ходами,
так же во втором файле исходник на Java как расчитываются ходы

Добавлен лог, то есть все ходы выводятся на консоль

http://rsdn.ru:80/File/39660/ReversiNUP.jar
http://rsdn.ru:80/File/39660/src.java

Спасибо.
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[20]: Alpha Beta и Reversi.
От: raskin Россия  
Дата: 20.07.05 05:24
Оценка:
Adopt wrote:
> Здравствуйте, raskin, Вы писали:
>
> R>Adopt wrote:
>> > Здравствуйте, raskin, Вы писали:
>> >
>> > R>Adopt wrote:
>> >> > Здравствуйте, raskin, Вы писали:
>> >> >
>
> R>соответственно, "s62b" поставит чёрную фишку в 6:2, что бы ни стояло на
> R>доске, а "m62b" поставит её туда только если можно, причём сделает
> R>перевороты (тестировал — ошибок не нашёл). Аналогично set_field(6,2,'b')
> R>и make_move(6,2,'b') .
>
> Вот новая версия с полностью передаланными ходами,
> так же во втором файле исходник на Java как расчитываются ходы
>
> Добавлен лог, то есть все ходы выводятся на консоль
>
> http://rsdn.ru:80/File/39660/ReversiNUP.jar
> http://rsdn.ru:80/File/39660/src.java
>
> Спасибо.
Придирка насчёт консоли: перезапуск игры не выводится.
Насчёт правил: здорово, что обрабатывается пропуск хода компьютера.
Хуже, что не обрабатывается пропуск хода игроком.
Остальное, вроде бы правильно (сверял окончательную позицию с тем, что
говорила проверяющая программа в консоли).
Замечание (не попытка наехать, я понимаю, что Вы сначала отладили
правила): то, что программа не ценит углы, помогло мне выиграть всухую.
------------------
1|w|w|w|w|w|w|w|w|
------------------
2| |w|w|w|w|w|w|w|
------------------
3| | |w|w|w|w|w|w|
------------------
4| | | |w|w|w|w|w|
------------------
5| | | |w|w|w|w|w|
------------------
6| | | |w|w|w|w|w|
------------------
7| | | |w|w|w|w|w|
------------------
8| | | | | |w|w|w|
------------------


Насчёт силы игры: в самом начале игры отдал угол. Программа достаточно
грамотно им воспользовалась, но выиграть не смогла.

Iagno уровень 1 : Ваша программа уверенно обыгрывала Iagno
------------------
1| |w|w|w|w|w|w|w|
------------------
2| |w|w|w|w|b|b|b|
------------------
3| |w|w|w|b|b|b|b|
------------------
4| |w|w|w|b|b|b|b|
------------------
5|w|w|w|w|b|b|b|b|
------------------
6|b|b|b|w|b|b|b|w|
------------------
7|b|b|b|b|b|b|b|w|
------------------
8|b|b|b|b|b|b|b|b|
------------------

, но не поняла, что Iagno пропускает ход.

Iagno уровень 2 : Iagno выиграл.

А так — уже здорово. Теперь можно подбирать оценочную функцию.
Posted via RSDN NNTP Server 2.0 beta
Re[21]: Alpha Beta и Reversi.
От: Adopt  
Дата: 20.07.05 21:34
Оценка:
Здравствуйте, raskin, Вы писали:

R>Adopt wrote:

>> Здравствуйте, raskin, Вы писали:
>>

R>, но не поняла, что Iagno пропускает ход.


R>Iagno уровень 2 : Iagno выиграл.


R>А так — уже здорово. Теперь можно подбирать оценочную функцию.


Да, осталось самое сложное....
решил что надо строить дерево на несколько ходов вперед,
количество ходов на которое будет построено дерево
является уровенем сложности. Однако это не оптимально ведь требуется довольно много ресурсов.

В этой версии целевая функция просто выбирает
какой ход даст больше очков, то есть само дерево
не строится, а оценивается текущая ситуация.

http://rsdn.ru:80/File/39660/ReversiAlp.jar

Как можно еще реализовать целевую функцию?

Спасибо.
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[22]: Alpha Beta и Reversi.
От: raskin Россия  
Дата: 21.07.05 06:00
Оценка:
Adopt wrote:
> Здравствуйте, raskin, Вы писали:
> R>А так — уже здорово. Теперь можно подбирать оценочную функцию.
>
> Да, осталось самое сложное....
> решил что надо строить дерево на несколько ходов вперед,
> количество ходов на которое будет построено дерево
> является уровенем сложности. Однако это не оптимально ведь требуется
> довольно много ресурсов.
А куда дели Alpha-Beta поиск? Исходно же был он? Ресурсов не так много —
на три полухода надо при полном переборе 8000 позиций, т.е. <10^6
операций с полями. А отсечение ещё сокращает перебор.
>
> В этой версии целевая функция просто выбирает
> какой ход даст больше очков, то есть само дерево
> не строится, а оценивается текущая ситуация.
Играть стала слабее. Iagno1 у неё выиграл. Просчитывать хотя бы ответ
противника необходимо.
>
> http://rsdn.ru:80/File/39660/ReversiAlp.jar
За индикацию New game — спасибо. Правда, теперь она используется мало —
история нужна была при поиске ошибок в обработке правил.
>
> Как можно еще реализовать целевую функцию?
А ценность полей Вы учитываете? Но все равно перебор с отсечением
реализовать в конце концов придётся.
Posted via RSDN NNTP Server 2.0 beta
Re[23]: Alpha Beta и Reversi.
От: Adopt  
Дата: 22.07.05 06:05
Оценка:
Здравствуйте, raskin, Вы писали:

>> В этой версии целевая функция просто выбирает

>> какой ход даст больше очков, то есть само дерево
>> не строится, а оценивается текущая ситуация.
R>Играть стала слабее. Iagno1 у неё выиграл. Просчитывать хотя бы ответ
R>противника необходимо.
>>
>> http://rsdn.ru:80/File/39660/ReversiAlp.jar
R>За индикацию New game — спасибо. Правда, теперь она используется мало —
R>история нужна была при поиске ошибок в обработке правил.
>>
>> Как можно еще реализовать целевую функцию?
R>А ценность полей Вы учитываете? Но все равно перебор с отсечением
R>реализовать в конце концов придётся.

Возможен ли такой алгоритм?

1) Найти возможные ходы
2) Поставить ход в позицию x, y одну из найденных
3) Рассчитать очки, которые получаются при ходе
3) Рассчитать возможные ходы противника
4) В цикле рекурсивно вызвать функцию для каждой из них (перейти в п. 2)
только с указанием другого цвета
и вычесть возвращенное этой функцией значение из очков п.3
5) вернуть очки из п.3
6) Сделать сортировку по очкам и выбрать найбольши эелемент

+ к этому алгоритму сдлелать альфа бета отсечения,
то есть проверять только самые лучшие ходы противника....
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[24]: Alpha Beta и Reversi.
От: raskin Россия  
Дата: 22.07.05 06:18
Оценка:
Adopt wrote:
> 1) Найти возможные ходы
> 2) Поставить ход в позицию x, y одну из найденных
> 3) Рассчитать очки, которые получаются при ходе
> 4) Рассчитать возможные ходы противника
> 5) В цикле рекурсивно вызвать функцию для каждой из них (перейти в п. 2)
> только с указанием другого цвета
> и вычесть возвращенное этой функцией значение из очков п.3
> 6) вернуть очки из п.3
> 7) Сделать сортировку по очкам и выбрать найбольши эелемент
>
> + к этому алгоритму сдлелать альфа бета отсечения,
> то есть проверять только самые лучшие ходы противника....

Отсекать по оценочным очкам, полученным противником, по-моему, не
оптимально. Лучше традиционно (разве в первых версиях было не так?).
Поскольку часто съесть больше всего означает отдать угол-другой. Лучший
ход быстро оказывается худшим. Но попробовать можно. С Iagno (если
дойдёт — с KReversi) я сравнивать помогу, а личную встречу Вы им сами
организуете. Если дать возможность выбирать, кто первый ходит.
Posted via RSDN NNTP Server 2.0 beta
Pre Final
От: Adopt  
Дата: 24.07.05 21:20
Оценка: 1 (1)
Здравствуйте, raskin, Вы писали:


R>Отсекать по оценочным очкам, полученным противником, по-моему, не

R>оптимально. Лучше традиционно (разве в первых версиях было не так?).
R>Поскольку часто съесть больше всего означает отдать угол-другой. Лучший
R>ход быстро оказывается худшим. Но попробовать можно. С Iagno (если
R>дойдёт — с KReversi) я сравнивать помогу, а личную встречу Вы им сами
R>организуете. Если дать возможность выбирать, кто первый ходит.

Вот версия в которой реализовано alpha — beta отсечения + еще дополнительно ограничена глубина
проверки до 4

http://rsdn.ru:80/File/39660/ReversiNUP.jar

Интересно ли с ней играть?

Спасибо.
... << RSDN@Home 1.1.4 stable rev. 510>>
Re: Pre Final
От: raskin Россия  
Дата: 25.07.05 06:05
Оценка:
Adopt wrote:
> Вот версия в которой реализовано alpha — beta отсечения + еще
> дополнительно ограничена глубина
> проверки до 4
>
Так и делают. Качество зависит от глубины и от оценочной функции.
> http://rsdn.ru:80/File/39660/ReversiNUP.jar
>
> Интересно ли с ней играть?
Во-первых, когда у неё остаётся 3 фишки против 48 и ни одного хода она
не пишет "Заставили пропустить", а кидает Exception.
Во-вторых, я не показатель — мне с Iagno:level 3 играть иногда скучно.
Метод лобовой атаки к Вашей программе применим вполне: аккуратно
громится угол, после чего вокруг него собирается >32 фишек, которые
нельзя взять.
Кроме того, она проиграл Iagno:level 1. У Вас же была версия, играющая
сильнее, но ошибающаяся иногда — может ладно, что изредка подтормаживала?
Posted via RSDN NNTP Server 2.0 beta
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.