Программирование шахмат / Студенческий спорт / Спорт онлайн - зимние и летние виды спорта. Обсуждения.
Авторизация



Напомнить пароль
Регистрация

Студенческий спортПрограммирование шахмат

Студенческий спорт: Программирование шахматУ меня есть идея, написать свой шахматный движок. С целью попрактиковаться в программирование да и в шахматах тоже.
Мож еще ктото тож хочет. Я имею работу не над одним проектом, а за разными, с целью посмотреть чья программа сильнее. Но конечно это не сейчас, после сессии естественно.

Комментарии (42)
rss свернуть / развернуть
А что Вы реально новое хотите написать? по поводу шахматных программ (и теории их написания) издано немало книг и работ, но все эти подходы не играют в шахматы а оценивают позиции на доске и выбирают тот ход, который приведет к более выгодным позициям. В Deep Blue главным достоинством был паралельный процессор, не помню уж, сколько в нем было узлов, Если трудится в данном направлении, то надо усовершенствовать игровую логику, добавить нетрадиционные и эксперементальные хода, изредка предпринимаемые машиной с целью "эксперементировать", heuristic оценку ситуации (у меня этот предмет преподается на английском), возможность не просто предсказывать ход оппонента, но и мотивы этого хода.

Как бы там ни было - успехов!
свернуть ветку
хм..)
вот если решать задачи связанные с шахматами....
Задание :))

"Шахматная ассоциация решила оснастить всех своих сотрудников такими телефонными номерами, которые бы набирались на кнопочном телефоне ходом коня. Например, ходом коня набирается телефон 340-49-27. При этом телефонный номер не может начинаться ни с цифры 0, ни из цифры 8.
-------------
| 1 | 2 | 3 |
-------------
| 4 | 5 | 6 |
-------------
| 7 | 8 | 9 |
-------------
|__| 0 |__ |
Нужно написать программу, которая определяет количество телефонных номеров длины N, которые набираются ходом коня.
1<N<100
Исходный файл должен содержать одно число - искомое количество телефонных номеров"

Или хотя бы напишите - при какой длине, сколько номеров)))))))))))))))))

свернуть ветку
ИМХО #2 #3 посты -- оффтоп.
Валерий, человек хочет написать не обязательно новый, а свой движок.
Татьяна, это обычная задача олимпиадного программирования.
Влад, у меня есть полностью оригинальный движок (примерно 50 часов разработки без опоры на сторонние идеи). Если хотите играть -- пишите в личку.

Впрочем, подозреваю, что движок, разработанный одним человеком, с реализованным по книжке, сравнивать будет не очень интересно, так что уточните пожалуйста, что имеете в виду, чтобы не было такой ситуации.

свернуть ветку
Дмитрий молодец!
Правильно)
:))
свернуть ветку
2 Татьяна: ну и зачем здесь -- при какой длине сколько номеров?
16, 36, 82, 188, 428, 984, 2240, 5152, 11728, 26976, 61408, 141248, 321536, 739584, 1683584, 3872512, 8815360, 20276736, 46157824, 106170368, 241685504, 555915264, 1265481728, 2910810112, 6626148352, 15241199616, 34694963200, 79803957248, 181665185792, 417858945024, 951211261952, 2187937841152, 4980606828544, 11456191266816, 26078795923456, 59985396236288, 136550348226560, 314087612350464, 714986905665536, 1644584089157632, 3743720041086976, 8611154085543936, 19602372623859712, 45088588156633088, 102639355578810368, 236086912597622784, 537426642977423360, 1236167122959204352,
свернуть ветку
Ну в Паскале это может быть примерно так:)))
uses crt;

var n,i:integer;
z,x,y,v,u,x1,y1,v1,u1:extended;
BEGIN
write('Enter kolichestvo tsifr n = ');
readln(n);
x:=4;y:=0;u:=1;v:=2;
if n>2 then
for i:=n downto 3 do
begin
x1:=x;y1:=y;u1:=u;v1:=v;
x:=2*(u1+v1);y:=v1;
u:=x1;v:=x1+2*y1;
end;
writeln('nomerov : ',2*(x+y+u)+3*v:3:0);
readln;
END.

Длина | Количество
-----------------------------------------
3 | 36
-----------------------------------------
8 | 2240
-----------------------------------------
35 | 11456191266816
-----------------------------------------
80 | 1715550913604185820(12)

Дмитрий Анисимов пять баллов :)))))
свернуть ветку
Кстати я сначала писал шахматный движок на Паскале. Потом решил переписать на ассемблер -- некоторые части получились короче...
свернуть ветку
Могу рассказать задачу о гиперферзе. Гиперферзь стоит на известном поле N-мерной (2<N<30000) доски в виде паралеллипидеда известных размеров. Требуется подсчитать количество возможных ходов гиперферзя. Примечание: гиперферзь ходит так, что смещение по оси x_i равно a_i*k, где a_i равно одному из трех значений: -1,0,+1; а k общее для всех осей.
свернуть ветку
Забыл добавить: на доске, кроме гиперферзя, ничего нет.
свернуть ветку
Здесь киберы и математики. Это не мое, я свободный художник...
свернуть ветку
Дядя Ринат, валим отсюда в другую тему, пока головы не сломали:)
свернуть ветку

Думаю, что расположение невозможно, пока доказать не удалось
свернуть ветку
Я эту задачу решить не смог )))
свернуть ветку
У меня был опыт написания шахматной программы. Единственное реальное, чего удалось добиться - более-менее корректное воспроизведение партии из файлов в формате .pgn
Заинтересованные товарищи можете почитать этот форум immortal223.borda.ru и/или написать мне в личку.
свернуть ветку
Алексей, так вы даже интерфейс не доделали?
свернуть ветку
Интерфейс как раз доделал. И примитивный перебор вариантов реализовал.
свернуть ветку
Ну вот значит скоро сможем сыграть:)))
Надо бы еще правила довести до полных. Как-то до таких высот программирования, чтобы запросто добавить правило 50 ходов или тройного повтора, сохранив при этом скорость работы, я не дорос.. :(
свернуть ветку
Правило 50 ходов делается по-человечески - ведем запись ходов, на ней отражаем взятия и ходы пешками, а потом проверяем время от времени. Тройной повтор аналогично. Был у меня неплохой исходничек для игры по локалке, правда не мой, там подключались самопальные движки.
свернуть ветку
Да? А как вы собираетесь внедрить это в перебор дерева вариантов?
свернуть ветку
Правило 50 ходов - никак, слишком оно суровое, а троекратное - в зависимости от оценки позиции, устраивает нас или нет. Будем проверять возникающую позицию на равенство той, которая была 2 и 4 полухода назад.
свернуть ветку
А я написал свой движок :)
Против людей играет довольно неплохо (стабильно обыгрывает знакомых 1-разрядников и КМС-ов), против других движков - похуже (рейтинг 2300 ЭЛО).
Если интересно - пишите! Могу поделиться исходниками (Delphi) :)
З.Ы. а насчет повторения позиции и правила 50 ходов:
повторения лучше делать не через сравнение позиций 2 и 4 полухода назад. Правильней хранить хэши всех позиций которые встречались, и в которые можно попасть из данной позиции (то есть все позиции после хода пешки или взятия (таких позиций теоретически может быть не много - не более 50)). также запоминаем количество таких позиций - если оно больше 50 - оценка 0, т.к. правило 50 ходов. :) И если есть совпадение текущей позиции с 2-мя позициями из этого списка - повторение :)
свернуть ветку
Отлично! ))
Вопрос - какой хэш? MD5 думаю снизит скорость работы вдвое... надо что-нибудь попроще...
свернуть ветку
не! там свой хэш считается. очень быстро! буквально 3-5 операций XOR в процедуре MakeMove :) скорость вообще не снижает, а если использовать хэш-таблицу для сохранения промежуточных вычислений - то будет очень круто! скорость как таковую не повысит, а сила игры сильно возрастет :)
свернуть ветку
А можно мне с ней сыграть? У меня текущий ЭЛО 2396
свернуть ветку
Алексей, а Вы дописали свою программу?
свернуть ветку
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.