Alpha Beta и Reversi
От: Adopt  
Дата: 09.07.05 21:44
Оценка:
Пытаюсь реализовать метод альфа бета отсчечений в игре Реверси
возникло несколько вопросов:

1) Какие лучеше всего значения поставить под alpha и beta?
Понятно что alpha < beta то есть присваиваю
alpha = -1000
beta = 1000
но не уверен что это правильно...

2) Не могли бы Вы посмотреть данную реализуацию
и прокомментировать что не правильно работает в самом алгоритме...
и соблюдены ли правла игры

интерфейс пока примитивный

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

7kb
... << RSDN@Home 1.1.4 stable rev. 510>>
Re: Alpha Beta и Reversi
От: raskin Россия  
Дата: 10.07.05 12:48
Оценка:
Adopt wrote:
> Пытаюсь реализовать метод альфа бета отсчечений в игре Реверси
> возникло несколько вопросов:
>
> 1) Какие лучеше всего значения поставить под alpha и beta?
> Понятно что alpha < beta то есть присваиваю
> alpha = -1000
> beta = 1000
> но не уверен что это правильно...
>
> 2) Не могли бы Вы посмотреть данную реализуацию
> и прокомментировать что не правильно работает в самом алгоритме...
> и соблюдены ли правла игры
>
> интерфейс пока примитивный
>
> http://rsdn.ru:80/File/39660/reversout.jar

Хотел посмотреть и обыграть, но из-за непонятного моей
java version "1.4.1_01"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_01-b01)
Java HotSpot(TM) Client VM (build 1.4.1_01-b01, mixed mode)

main class не смог. html-страничка, быть может, помогла бы. Или ключик к
java. Или указание на Вашу версию. Под любимой ОС не смотрел, сейчас под
Windows. Завтра посмотрю.
Posted via RSDN NNTP Server 2.0 beta
Re[2]: Alpha Beta и Reversi
От: Adopt  
Дата: 10.07.05 21:22
Оценка:
Здравствуйте, raskin, Вы писали:

R>Adopt wrote:

>> Пытаюсь реализовать метод альфа бета отсчечений в игре Реверси
>> возникло несколько вопросов:

R>Хотел посмотреть и обыграть, но из-за непонятного моей

R>java version "1.4.1_01"
R>Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.1_01-b01)
R>Java HotSpot(TM) Client VM (build 1.4.1_01-b01, mixed mode)

R>main class не смог. html-страничка, быть может, помогла бы. Или ключик к

R>java. Или указание на Вашу версию. Под любимой ОС не смотрел, сейчас под
R>Windows. Завтра посмотрю.

нужна JRE 1.5 ...
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[3]: Alpha Beta и Reversi
От: raskin Россия  
Дата: 11.07.05 06:34
Оценка:
Adopt wrote:
> R>Adopt wrote:
>> > Пытаюсь реализовать метод альфа бета отсчечений в игре Реверси
>> > возникло несколько вопросов:
>
> R>Хотел посмотреть и обыграть, но из-за непонятного моей
> [skip]
> R>java. Или указание на Вашу версию. Под любимой ОС не смотрел, сейчас под
> R>Windows. Завтра посмотрю.
>
> нужна JRE 1.5 ...
Спасибо за совет.
Впечатления из-под Linux:
1. Прорисовка верхнего ряда мне показалась странной (в полклетки) — это
мой глюк?
2. Правила нарушаются:
*o
o*
------
***
o*
------
o
o**
o*
------
  O
*****
  o*
------
   o
  o?***
o o*

3. За углы не борется. То есть совсем. То есть идёт вперёд ногами против
любого вменяемого противника. Догонять IaGno(идущего туда же). Это про
оценочную функцию — отданный мне угол при свободных пол-доски -- это
должен быть минус для оценки позиции.

2!! + 3 привели к решению бросить это дело. (до исправления?).

P.S. Сделайте, пожалуйста, кнопку [New Game] или скажите, как этого
(Restart) добиться без перезапуска Java.
Posted via RSDN NNTP Server 2.0 beta
Re[4]: Alpha Beta и Reversi
От: Adopt  
Дата: 11.07.05 22:00
Оценка:
Здравствуйте, raskin, Вы писали:

R>. За углы не борется. То есть совсем. То есть идёт вперёд ногами против

R>любого вменяемого противника. Догонять IaGno(идущего туда же). Это про
R>оценочную функцию — отданный мне угол при свободных пол-доски -- это
R>должен быть минус для оценки позиции.

R>2!! + 3 привели к решению бросить это дело. (до исправления?).


R>P.S. Сделайте, пожалуйста, кнопку [New Game] или скажите, как этого

R>(Restart) добиться без перезапуска Java.

Можно поподробней на счет правил... а не очень понял....

Вот новая версия
http://rsdn.ru:80/File/39660/ReversiUpdate.jar

спасибо.
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[5]: Alpha Beta и Reversi
От: Adopt  
Дата: 11.07.05 23:12
Оценка: 4 (1)
Здравствуйте, Adopt, Вы писали:

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


вот более свежая версия

http://rsdn.ru:80/File/39660/ReversiNew.jar
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[6]: Alpha Beta и Reversi
От: raskin Россия  
Дата: 12.07.05 04:49
Оценка:
Adopt wrote:
> Здравствуйте, Adopt, Вы писали:
>
> A>Здравствуйте, raskin, Вы писали:
>
> вот более свежая версия
>
> http://rsdn.ru:80/File/39660/ReversiNew.jar

Уже приятно поиграться.
Но:
1. Правила. Сделайте ей запись партии, что ли. Ход — поле до — поле
после. Или отдельную кнопку: указать свой ход — показать что изменится —
показать ответный ход — показать что изменится (всё разными цветами) —
применить. Увидите много интересного. И я помогу, вероятно. А то делать
снимки экрана про запас — лень. (Уж извините). И трафика случайным
читателям ветки они пожрут.
2. Зачем она иногда выдаёт Exception:Index out of bounds на легальные
ходы? Следующим щелчком всё срабатывает, но изучение записи этой
проблемы поможет найти ошибки в алгоритме, и похоже в алгоритме
обработки хода.
3. В поиске Вы как оценочную функцию используете количество фишек?
Добавьте поправку на углы. Это не все делают, но те программы, кто не
делает, играют слабее.

До свидания, успехов.
Posted via RSDN NNTP Server 2.0 beta
Re[7]: Alpha Beta и Reversi
От: Adopt  
Дата: 13.07.05 04:57
Оценка:
Здравствуйте, raskin, Вы писали:

R>Adopt wrote:

>> Здравствуйте, Adopt, Вы писали:
>>
>> A>Здравствуйте, raskin, Вы писали:
>>
>> вот более свежая версия
>>
>> http://rsdn.ru:80/File/39660/ReversiNew.jar

R>Уже приятно поиграться.

R> Но:
R>1. Правила. Сделайте ей запись партии, что ли. Ход — поле до — поле

ok, сделаю

R>2. Зачем она иногда выдаёт Exception:Index out of bounds на легальные


это баг

R>3. В поиске Вы как оценочную функцию используете количество фишек?


можно поподробней как такое возможно такое реализовать?
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[8]: Alpha Beta и Reversi
От: raskin Россия  
Дата: 13.07.05 07:07
Оценка:
Adopt wrote:
> R>Уже приятно поиграться.
> R> Но:
> R>1. Правила. Сделайте ей запись партии, что ли. Ход — поле до — поле
>
> ok, сделаю
>
> R>2. Зачем она иногда выдаёт Exception:Index out of bounds на легальные
>
> это баг
Верю. Один такой баг у меня объяснил половину нестыковок на игровом поле.
>
> R>3. В поиске Вы как оценочную функцию используете количество фишек?
>
> можно поподробней как такое возможно такое реализовать?
Alpha-Beta отсечение, насколько я помню, это поиск по дереву игры с
оптимизацией и применением на некоторой глубине оценочной функции (я не
верю, что Ваша программа обходит хоть одну ветвь до конца — на 60 ходов.
Мне ещё 18 нет, а я у неё уже выигрывал..). Поэтому на некотором шаге
оценкой позиции является не фактическая её стоимость (+\infty/-\infty),
а её оценка исходя из разных характеристик. Одна из них — количество
фишек. Если она же единственная, то программа сдаёт углы и стороны без
особого сопротивления (они дают выигрыш не сразу), а потом оказывается
поздно. На самом же деле, сданный угол при полупустой доске — почти
верный проигрыш. Я никогда не писал сам такую программу, но если Вы
введёте в оценочную функцию большую ценность углов/сторон с параметром,
могу поподбирать немного. Могу, в принципе, посмотреть оценочную функцию
в kreversi и сказать их идеи. При этом, правда, возможно (хотя не факт)
игрушка окажется под угрозой "вируса GPL", как это называют противники
любимой ОС.
Posted via RSDN NNTP Server 2.0 beta
Re: Alpha Beta и Reversi
От: mkopachev  
Дата: 13.07.05 07:46
Оценка:
Здравствуйте, Adopt, Вы писали:

A>Пытаюсь реализовать метод альфа бета отсчечений в игре Реверси

A>возникло несколько вопросов:

A>1) Какие лучеше всего значения поставить под alpha и beta?

A> Понятно что alpha < beta то есть присваиваю
A> alpha = -1000
A> beta = 1000
A> но не уверен что это правильно...

A>2) Не могли бы Вы посмотреть данную реализуацию

A>и прокомментировать что не правильно работает в самом алгоритме...
A>и соблюдены ли правла игры

A>интерфейс пока примитивный


A>http://rsdn.ru:80/File/39660/reversout.jar


A>7kb


Оригинальный Alpha-Beta используешь? На сколько полуходов можно перебрать реверси (я сам в свое время шахматы писал)?

С уважением Михаил Копачев
... << RSDN@Home 1.1.4 @@subversion >>
Re[9]: Alpha Beta и Reversi
От: Adopt  
Дата: 13.07.05 21:30
Оценка:
Здравствуйте, raskin, Вы писали:

R>Adopt wrote:

>> R>Уже приятно поиграться.
>> R> Но:
>> R>1. Правила. Сделайте ей запись партии, что ли. Ход — поле до — поле
>>
R>могу поподбирать немного. Могу, в принципе, посмотреть оценочную функцию
R>в kreversi и сказать их идеи. При этом, правда, возможно (хотя не факт)
R>игрушка окажется под угрозой "вируса GPL", как это называют противники
R>любимой ОС.

да, было бы здорово....


Скажите какие ошибки в правилах игры присутствуют
в этой версии (сделана кнопка Computer Step)

Если не сложно выложите скрины в профайле

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

Спасибо.
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[2]: Alpha Beta и Reversi
От: Adopt  
Дата: 13.07.05 21:33
Оценка:
Здравствуйте, mkopachev, Вы писали:

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


A>>Пытаюсь реализовать метод альфа бета отсчечений в игре Реверси

A>>возникло несколько вопросов:

A>>1) Какие лучеше всего значения поставить под alpha и beta?

A>> Понятно что alpha < beta то есть присваиваю
A>> alpha = -1000
A>> beta = 1000
A>> но не уверен что это правильно...

A>>2) Не могли бы Вы посмотреть данную реализуацию

A>>и прокомментировать что не правильно работает в самом алгоритме...
A>>и соблюдены ли правла игры

A>>интерфейс пока примитивный


A>>http://rsdn.ru:80/File/39660/reversout.jar


A>>7kb


M> Оригинальный Alpha-Beta используешь? На сколько полуходов можно перебрать реверси (я сам в свое время шахматы писал)?


Да, вот отсюда
http://algolist.manual.ru
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[2]: Alpha Beta и Reversi
От: Adopt  
Дата: 13.07.05 21:34
Оценка:
Здравствуйте, mkopachev, Вы писали:

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


A>>Пытаюсь реализовать метод альфа бета отсчечений в игре Реверси

A>>возникло несколько вопросов:

M> Оригинальный Alpha-Beta используешь? На сколько полуходов можно перебрать реверси (я сам в свое время шахматы писал)?


M> С уважением Михаил Копачев


Да, вот отсюда http://algolist.manual.ru
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[10]: Alpha Beta и Reversi.
От: raskin Россия  
Дата: 14.07.05 05:49
Оценка:
Adopt wrote:
> Здравствуйте, raskin, Вы писали:
>
> R>Adopt wrote:
>> > R>Уже приятно поиграться.
>> > R> Но:
>> > R>1. Правила. Сделайте ей запись партии, что ли. Ход — поле до — поле
>> >
> R>могу поподбирать немного. Могу, в принципе, посмотреть оценочную функцию
> R>в kreversi и сказать их идеи. При этом, правда, возможно (хотя не факт)
> R>игрушка окажется под угрозой "вируса GPL", как это называют противники
> R>любимой ОС.
>
> да, было бы здорово....
>
Ничего особенного, но аккуратно (странно, кстати, раньше программа
играла сильнее, может быть потом старую версию тоже посмотрю). Есть очки
за занятые клетки и бонусы. При этом бонусы учитываются в начале игры с
большим весом, чем в конце (когда они не учитываются). Клетки 2-ой и
7-ой линии дают бонус -1. Углы дают бонус 2. Соседние с углом клетки —
бонус -1. Кроме того, в начале игры ценится не столько численность,
сколько перевес. А подробности — 22 KB:

http://websvn.kde.org/*checkout*/trunk/KDE/kdegames/kreversi/Engine.cpp?content-type=text%2Fplain&amp;rev=431614

> Скажите какие ошибки в правилах игры присутствуют

> в этой версии (сделана кнопка Computer Step)
>
Я просил ещё лог.. Кстати, о правилах. Нашёл нарушение правил —
очерёдность ходов. Если один из противников не может сделать свой ход,
ход передаётся второму. Из-за этого игра остановилась в позиции, из
которой я потом выиграл у Iagno..
> Если не сложно выложите скрины в профайле
>
> http://rsdn.ru:80/File/39660/ReversiUp.jar


Exception in thread "AWT-EventQueue-0"
java.lang.ArrayIndexOutOfBoundsException:
0 >= 0
at java.util.Vector.elementAt(Unknown Source)
at reversi.c.a(Unknown Source)
at reversisample.MainJFrame.c(Unknown Source)
at reversisample.MainJFrame.b(Unknown Source)
at reversisample.a.actionPerformed(Unknown Source)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown
Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown
Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at
javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Sour
ce)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown
Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at
java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown
Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

-вместо ComputerMove.

В вот такой ситуации: http://rsdn.ru:80/File/40778/rev_err1.png . Размер
— 7KB.

Игра против Iagno. Светлая фишка — последний ход синего (Iagno). Не
Photoshop, что Вы. http://rsdn.ru:80/File/40778/rev_err2_small.png .
Iagno всё делает правильно. Размер — 40 KB.

Время жизни картинок — надеюсь, большое. (>=1 месяц)
Posted via RSDN NNTP Server 2.0 beta
Re[3]: Alpha Beta и Reversi
От: mkopachev  
Дата: 14.07.05 08:28
Оценка:
Здравствуйте, Adopt, Вы писали:

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


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


A>>>Пытаюсь реализовать метод альфа бета отсчечений в игре Реверси

A>>>возникло несколько вопросов:

A>>>1) Какие лучеше всего значения поставить под alpha и beta?

A>>> Понятно что alpha < beta то есть присваиваю
A>>> alpha = -1000
A>>> beta = 1000
A>>> но не уверен что это правильно...

A>>>2) Не могли бы Вы посмотреть данную реализуацию

A>>>и прокомментировать что не правильно работает в самом алгоритме...
A>>>и соблюдены ли правла игры

A>>>интерфейс пока примитивный


A>>>http://rsdn.ru:80/File/39660/reversout.jar


A>>>7kb


M>> Оригинальный Alpha-Beta используешь? На сколько полуходов можно перебрать реверси (я сам в свое время шахматы писал)?


A>Да, вот отсюда

A>http://algolist.manual.ru
А что-нибудь типа NegaScout или MTD(f) не пробовал? Это достаночно серьезно ускоряет перебор. На шахматах я получил возможность увеличить глубину просмотра примерно втрое без дополнительных оптимизаций и использования генераторов ходов.

З.Ы. А вот по твоей ссылке я пройти не могу — проксик режет сволота .

С уважением Михаил Копачев
... << RSDN@Home 1.1.4 @@subversion >>
Re[11]: Alpha Beta и Reversi.
От: Adopt  
Дата: 15.07.05 04:50
Оценка:
Здравствуйте, raskin, Вы писали:

R>Adopt wrote:

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

R>Игра против Iagno. Светлая фишка — последний ход синего (Iagno). Не

R>Photoshop, что Вы. http://rsdn.ru:80/File/40778/rev_err2_small.png .
R>Iagno всё делает правильно. Размер — 40 KB.

Можете поподробней что в этой комбинации не так,
и что должна сделать была программа?
Если не сложно указывайте координаты...

Спасибо


R>Время жизни картинок — надеюсь, большое. (>=1 месяц)
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[12]: Alpha Beta и Reversi.
От: raskin Россия  
Дата: 15.07.05 06:12
Оценка: 3 (1)
Adopt wrote:
> R>Игра против Iagno. Светлая фишка — последний ход синего (Iagno). Не
> R>Photoshop, что Вы. http://rsdn.ru:80/File/40778/rev_err2_small.png .
> R>Iagno всё делает правильно. Размер — 40 KB.
>
> Можете поподробней что в этой комбинации не так,
> и что должна сделать была программа?
> Если не сложно указывайте координаты...
>
> Спасибо
>
>
> R>Время жизни картинок — надеюсь, большое. (>=1 месяц)

Была бы история в консоли — были бы координаты сразу.
Ситуация:
(начало координат 1,1)
1,4 — чёрная фишка
2,5 — чёрная
3,4 — чёрная
3,5 — белая
3,6 — чёрная
4,4 — чёрная
4,5 — белая
5,4 — чёрная
5,5 — белая

Ход белых:
3,7
Взяты:
3,6 между 3,5 и 3,7

Ответ чёрных:
4,7
взяты:
3,6 между 4,7 и 2,5

Программа объявляет взятыми:
3,6 (корректно)
4,5 (между 4,4 и 4,7 игнорируя 4,6 ??)

В символах _bw (. — следующий ход):
___b
____b
___bwb.
___bw
___bw
=========NEXT=======
___b
____b
___bwww
___bw_.
___bw
===========NEXT=======
___b____   |  ___b____
____b___   |  ____b___
___bwbw_   |  ___bwbw_
___bw_b_   |  ___bb_b_
___bw___   |  ___bw___
________   |  ________
________   |  ________
________   |  ________
Posted via RSDN NNTP Server 2.0 beta
Re[13]: Alpha Beta и Reversi.
От: Adopt  
Дата: 16.07.05 23:43
Оценка:
Здравствуйте, raskin, Вы писали:

R>4,5 (между 4,4 и 4,7 игнорируя 4,6 ??)


R>В символах _bw (. — следующий ход):

R>
R>___b
R>____b
R>___bwb.
R>___bw
R>___bw
R>=========NEXT=======
R>___b
R>____b
R>___bwww
R>___bw_.
R>___bw
R>===========NEXT=======
R>___b____   |  ___b____
R>____b___   |  ____b___
R>___bwbw_   |  ___bwbw_
R>___bw_b_   |  ___bb_b_
R>___bw___   |  ___bw___
R>________   |  ________
R>________   |  ________
R>________   |  ________
R>


А как часто повторяется эта ошибка — периодически или постоянно?
Бывали ли случаи когда по диагонали вниз вправо не закрашивались ячейки?
... << RSDN@Home 1.1.4 stable rev. 510>>
Re[14]: Alpha Beta и Reversi.
От: raskin Россия  
Дата: 17.07.05 06:15
Оценка:
Adopt wrote:
> Здравствуйте, raskin, Вы писали:
>
> R>4,5 (между 4,4 и 4,7 игнорируя 4,6 ??)
>
> R>В символах _bw (. — следующий ход):
> R>
>
> R>___b
> R>____b
> R>___bwb.
> R>___bw
> R>___bw
> R>=========NEXT=======
> R>___b
> R>____b
> R>___bwww
> R>___bw_.
> R>___bw
> R>===========NEXT=======
> R>___b____ | ___b____
> R>____b___ | ____b___
> R>___bwbw_ | ___bwbw_
> R>___bw_b_ | ___bb_b_
> R>___bw___ | ___bw___
> R>________ | ________
> R>________ | ________
> R>________ | ________
> R>
>
>
>
> А как часто повторяется эта ошибка — периодически или постоянно?
> Бывали ли случаи когда по диагонали вниз вправо не закрашивались ячейки?

Разные похожие ошибки повторяются иногда. Я к тому же не всегда их
замечаю. А Setup Board, например, здесь нет. Из-за отсутствия истории с
указанием всех ходов и принадлежностей всех клеток после каждого поиск
нестыковок ручной => трудоёмкий. А опыта .jar -> .class -> .java или
писания на Java у меня нет, поэтому самому добавлять мне не хочется.
Если получится могу написать и отладить переворот фишек на Pascal и
отослать вам хоть .exe, хоть ELF (с исходником, не вопрос) — вам какой
формат ближе (я не уверен, что сделаю, но шанс есть)?
Posted via RSDN NNTP Server 2.0 beta
Re[15]: Alpha Beta и Reversi.
От: Adopt  
Дата: 17.07.05 21:19
Оценка:
Здравствуйте, 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

Здесь все нормально?

история будет выводиться в консоль в следующей версии
... << RSDN@Home 1.1.4 stable rev. 510>>
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...
Пока на собственное сообщение не было ответов, его можно удалить.