Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.02.2016, 16:06   #31
Олег*
Пользователь
 
Регистрация: 07.01.2010
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
простите, а откуда взялся нолик перед знаком <
(на скриншоте его чётко видно) ?!
Мне бы и самому хотелось это узнать Вчера ночью как-то уже не до этого было. Главное было, что он вроде бы не мешал запуску батника и интерпретации имени текстового файла. Поэтому я списал это на какую-то хитрую особенность кодировки. Подумал, что знак «<» в моей системе почему-то отображается как «0<». Может быть Юникод какой-нибудь? Честно говоря, я в этих делах (в тонкостях кодировок) не особо силен. Может быть создается/сохраняется в Юникоде, а на консольном окне показыватся в ANSI? Оттуда и этот второй «паразитный» знак вылезает?! А может быть это и на работу батника влияет? Может быть его надо сохранять именно в ANSI?
Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
подскажите, где можно скачать эту консольную программку? (хочу сам посмотреть, что происходит)
Цитата:
Сообщение от Alex11223 Посмотреть сообщение
А вот на этой странице можно скачать и этот файл (равно как и файл для 64-битных компов) , а еще и сишные исходники, если кому интересно:
https://stockfishchess.org/download/
Цитата:
Сообщение от ds.Dante Посмотреть сообщение
Запускайте cmd, и уже оттуда - свой скрипт. А то вдруг это мелькнувшее окно сообщает вам о вашей синтаксической ошибке. Не знаю как Total Commander, но Far держит в себе весь консольный вывод (как в своё время Norton Commander). В нём можно просто запускать батники и потом смотреть весь вывод через Ctrl+O.[/
Да, Вы правы. Сейчас запустил Пуск > Выпонить… > cmd, в появившемся окне вставил имя своего батника (вариант с двумя «<»), и мне там ответили (теперь уже в цветном варианте!) вот так:



Получается, действительно, если через Тотал Командер запускать, то после первой же синтаксической ошибки окно аварийно закрывается, игнорируя даже следующую дальше команду “Pause”.
Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
попробуйте без start.
Сейчас попробовал без start, вот в таком виде:
Код:
c:\proba\stockfish_7_32bit.exe<c:\proba\commands.txt
pause
Удивительно, но вроде бы работает, хотя немного не так, как ожидается. «Работает» в смысле считывает строки из текстового файла и интерпретирует их как «внутренние» команды для движка. Это уже очень хорошо, потому что цель создания этой ветки состояла именно в этом. А почему вчера у меня так не получилось, совершенно не понятно. Наверно, потому что я, пытаясь менять несколько факторов одновременно, запутался в трех соснах
Теперь расшифрую фразу «работает немного не так, как ожидается». Вот, например, текстовый файл выглядит вот так:
Код:
position startpos moves a2a4 a7a5 b2b4 b7b5 c2c4 c7c5 d2d4 d7d5 e2e4 e7e5 f2f4 f7f5 g2g4 g7g5 h2h4 h7h5
go infinite
Первая строка расставляет позицию. Партия совершенно глупая и разыгрывается просто для тестирования. Итак, все пешки (по 8 штук с каждой стороны) дружно шагнули на 2 поля вперед и уперлись друг в друга на центральных горизонталях.
Вторая строка предписывает движку начать бесконечный анализ этой позиции.
Если две эти команды ввести в ручном режиме, то на экране будет бесконечно и очень быстро выводиться информация о текущем «бесконечном» анализе позиции до тех пор, пока не будет введена команда “stop”.
А вот в «автоматическом» режиме у нас получается вот что:



То есть бесконечного анализа не получается. Нам просто говорят: «Лучший ход в данной позиции – побить белой пешкой a4 черную пешку b5. Вот именно для этого я и расставил такую «глупую» позицию командой из первой строки. Если бы команда из первой строки не выполнилась по каким-то причинам, то такой ход (из начальной, по умолчанию, позиции был бы невозможен). То есть, можно сделать вывод, что задача этой ветки выполнена: теперь можно через текстовый файл отдавать «внутренние» команды запущенной консольной программе. А почему работает немного не так, как ожидалось, это я уже буду разбираться отдельно.

Большое спасибо за помощь всем, кто принял участие в обсуждении!

P.S. По поводу того откуда взялся “Start”. Это я в интернете вчера нарыл что-то похожее и попытался «поиграть» ключами, но ничего путного из этого не получилось:
http://ab57.ru/cmdlist/start.html

Больше всего меня там привлек параметр "/I". Попытался им "поиграть", но ничего путного не получилось
А может быть какие-то другие ключи из перечисленных там надо использовать, чтобы не создавать "матрешку" из двух файлов?

Последний раз редактировалось Олег*; 20.02.2016 в 16:20.
Олег* вне форума Ответить с цитированием
Старый 20.02.2016, 18:00   #32
Олег*
Пользователь
 
Регистрация: 07.01.2010
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Олег* Посмотреть сообщение
Теперь расшифрую фразу «работает немного не так, как ожидается». Вот, например, текстовый файл выглядит вот так:
Код:
position startpos moves a2a4 a7a5 b2b4 b7b5 c2c4 c7c5 d2d4 d7d5 e2e4 e7e5 f2f4 f7f5 g2g4 g7g5 h2h4 h7h5
go infinite
Первая строка расставляет позицию. Партия совершенно глупая и разыгрывается просто для тестирования. Итак, все пешки (по 8 штук с каждой стороны) дружно шагнули на 2 поля вперед и уперлись друг в друга на центральных горизонталях.
Вторая строка предписывает движку начать бесконечный анализ этой позиции.
Если две эти команды ввести в ручном режиме, то на экране будет бесконечно и очень быстро выводиться информация о текущем «бесконечном» анализе позиции до тех пор, пока не будет введена команда “stop”.
А вот в «автоматическом» режиме у нас получается вот что:

То есть бесконечного анализа не получается. Нам просто говорят: «Лучший ход в данной позиции – побить белой пешкой a4 черную пешку b5. Вот именно для этого я и расставил такую «глупую» позицию командой из первой строки. Если бы команда из первой строки не выполнилась по каким-то причинам, то такой ход (из начальной, по умолчанию, позиции был бы невозможен). То есть, можно сделать вывод, что задача этой ветки выполнена: теперь можно через текстовый файл отдавать «внутренние» команды запущенной консольной программе. А почему работает немного не так, как ожидалось, это я уже буду разбираться отдельно.
Если кому интересно, сейчас выяснил любопытный факт. Оказалось, что если один раз дать команду “go infinite” («анализировать заданную позицию бесконечно»), то движок просто показывает нам тот ход, который он считает лучшим, а вот если повторить эту команду 2 раза подряд, тогда действительно включается бесконечный анализ.
И еще интересная фишка – можно его заставить журнал вести, тогда проще ориентироваться, что он понимает, а что нет.
Например, сейчас у меня текстовый файл выглядит вот так:
Код:
setoption name Write Debug Log value true
uci
setoption name Hash value 32
isready
ucinewgame
position startpos moves a2a4 a7a5 b2b4 b7b5 c2c4 c7c5 d2d4 d7d5 e2e4 e7e5 f2f4 f7f5 g2g4 g7g5 h2h4 h7h5
go infinite
go infinite
А лог выглядит вот так:

Цитата:
>> uci
<< id name Stockfish 7
<< id author T. Romstad, M. Costalba, J. Kiiski, G. Linscott
<<
<< option name Write Debug Log type check default false
<< option name Contempt type spin default 0 min -100 max 100
<< option name Threads type spin default 1 min 1 max 128
<< option name Hash type spin default 16 min 1 max 2048
<< option name Clear Hash type button
<< option name Ponder type check default false
<< option name MultiPV type spin default 1 min 1 max 500
<< option name Skill Level type spin default 20 min 0 max 20
<< option name Move Overhead type spin default 30 min 0 max 5000
<< option name Minimum Thinking Time type spin default 20 min 0 max 5000
<< option name Slow Mover type spin default 84 min 10 max 1000
<< option name nodestime type spin default 0 min 0 max 10000
<< option name UCI_Chess960 type check default false
<< option name SyzygyPath type string default <empty>
<< option name SyzygyProbeDepth type spin default 1 min 1 max 100
<< option name Syzygy50MoveRule type check default true
<< option name SyzygyProbeLimit type spin default 6 min 0 max 6
<< uciok
>> setoption name Hash value 32
>> isready
<< readyok
>> ucinewgame
>> position startpos moves a2a4 a7a5 b2b4 b7b5 c2c4 c7c5 d2d4 d7d5 e2e4 e7e5 f2f4 f7f5 g2g4 g7g5 h2h4 h7h5
>> go infinite
>> go infiniteinfo depth 1 seldepth 1 multipv 1 score cp 130 nodes 3103 nps 206866 tbhits 0 time 15 pv c4d5 h5g4 f1b5 e8f7 f4e5 a5b4
<< info depth 2 seldepth 2 multipv 1 score cp 130 nodes 3848 nps 183238 tbhits 0 time 21 pv c4d5 h5g4
<< info depth 3 seldepth 4 multipv 1 score cp 130 nodes 6023 nps 188218 tbhits 0 time 32 pv c4d5 h5g4 f1b5 e8f7 f4e5
<< info depth 4 seldepth 5 multipv 1 score cp 178 nodes 10988 nps 211307 tbhits 0 time 52 pv c4d5 c5d4 f1b5 e8f7 f4e5 f8b4 e1e2
<< info depth 5 seldepth 7 multipv 1 score cp 178 nodes 15103 nps 218884 tbhits 0 time 69 pv c4d5 c5d4 f1b5 e8f7 f4e5 f8b4 e1e2
<< info depth 6 seldepth 8 multipv 1 score cp 158 nodes 34110 nps 256466 tbhits 0 time 133 pv c4d5 c5d4 f1b5 c8d7 h4g5 d7b5 a4b5 f5e4
<< info depth 7 seldepth 8 multipv 1 score cp 198 nodes 109327 nps 280325 tbhits 0 time 390 pv f4e5 d5e4 b4c5 h5g4 c1g5 d8g5 h4g5
<< info depth 8 seldepth 9 multipv 1 score cp 180 nodes 143414 nps 288559 tbhits 0 time 497 pv f4e5 f5e4 c4d5 c8g4 f1b5 b8d7 d1c2 c5d4 c2e4 f8b4 e1f1
<< info depth 9 seldepth 14 multipv 1 score cp 160 nodes 295193 nps 289404 hashfull 74 tbhits 0 time 1020 pv f4e5 f5e4 c4d5 c8g4 f1b5 b8d7 d1c2 c5d4 c2e4 f8b4 e1f1
<< info depth 10 currmove f4g5 currmovenumber 6
<< info depth 10 currmove g4h5 currmovenumber 7
<< info depth 10 currmove b4a5 currmovenumber 8
<< info depth 10 currmove c4b5 currmovenumber 9
<< info depth 10 currmove d4c5 currmovenumber 10
<< info depth 10 currmove e4d5 currmovenumber 11
<< info depth 10 currmove f4e5 currmovenumber 12
<< info depth 10 currmove g4f5 currmovenumber 13
<< info depth 10 currmove h4g5 currmovenumber 14
<< info depth 10 currmove d1e2 currmovenumber 15
<< info depth 10 currmove c1d2 currmovenumber 16
<< info depth 10 currmove b1c3 currmovenumber 17
<< info depth 10 currmove g1e2 currmovenumber 18
<< info depth 10 currmove e1f2 currmovenumber 19
<< info depth 10 currmove d1c2 currmovenumber 20
<< info depth 10 currmove b1d2 currmovenumber 21
<< info depth 10 currmove f1g2 currmovenumber 22
<< info depth 10 currmove f1e2 currmovenumber 23
<< info depth 10 currmove d1f3 currmovenumber 24
<< info depth 10 currmove g1f3 currmovenumber 25
<< info depth 10 currmove c1b2 currmovenumber 26
<< info depth 10 currmove e1e2 currmovenumber 27
<< info depth 10 currmove g1h3 currmovenumber 28
<< info depth 10 currmove c1a3 currmovenumber 29
<< info depth 10 currmove a1a2 currmovenumber 30
<< info depth 10 currmove a1a3 currmovenumber 31
<< info depth 10 currmove c1e3 currmovenumber 32
<< info depth 10 currmove e1d2 currmovenumber 33
<< info depth 10 currmove d1d3 currmovenumber 34
<< info depth 10 currmove h1h2 currmovenumber 35
<< info depth 10 currmove f1h3 currmovenumber 36
<< info depth 10 currmove d1b3 currmovenumber 37
<< info depth 10 currmove b1a3 currmovenumber 38
<< info depth 10 currmove h1h3 currmovenumber 39
<< info depth 10 currmove f1d3 currmovenumber 40
<< info depth 10 currmove d1d2 currmovenumber 41
<< info depth 10 seldepth 17 multipv 1 score cp 90 nodes 961605 nps 292547 hashfull 222 tbhits 0 time 3287 pv f4e5 f5e4 c1g5 c8g4 g5d8 g4d1 d8a5 b5c4 e1d1 c5b4
<< info depth 11 currmove f4e5 currmovenumber 1
<< info depth 11 seldepth 17 multipv 1 score cp 97 lowerbound nodes 984823 nps 292753 hashfull 225 tbhits 0 time 3364 pv f4e5
<< info depth 11 currmove f4e5 currmovenumber 1
<< info depth 11 seldepth 17 multipv 1 score cp 104 lowerbound nodes 991909 nps 293203 hashfull 225 tbhits 0 time 3383 pv f4e5
Разумеется, я этот "бесконечный" анализ очень быстро остановил, но лог все равно получился огромный, и я здесь показал только его начало.
Как вы понимаете, знаком ">> " обозначены наши команды, а знаком "<<" обозначена информация, выводимая на консоль.

Последний раз редактировалось Олег*; 20.02.2016 в 20:01.
Олег* вне форума Ответить с цитированием
Старый 20.02.2016, 18:37   #33
Олег*
Пользователь
 
Регистрация: 07.01.2010
Сообщений: 30
По умолчанию

Цитата:
Сообщение от ds.Dante Посмотреть сообщение
Не будет. Тут ограничение - процессорное время, которое шахматной оболочкой почти не потребляется.
И все-таки ГОРАЗДО шустрее анализирует!!!
Сейчас для сравнения расставил во Фрице15 ту же самую "глупую" позицию и попросил тот же самый движок ее "бесконечно" проанализировать. Ну так вот... В консольном варианте скорость, как Вы сами можете видеть в логе, 290-295 nps, а, используя графическую оболочку, получается только 250-255 nps. Таким образом, имеем прирост скорости 16%!
Олег* вне форума Ответить с цитированием
Старый 20.02.2016, 20:00   #34
Олег*
Пользователь
 
Регистрация: 07.01.2010
Сообщений: 30
По умолчанию

А вот если я соберусь свою оболочку написать, то как мне следует организовывать ее взаимодействие с движком? Ну в смысле, как ему команды передавать и как от него ответы получать? Вот так же через пакетники, которые оболочка будет создавать и запускать, а ответы, например, из лог-файла считывать, или как-то еще? Как это удобнее организовать, не подскажете? Или в языках высокого уровня существуют какие-нибудь специальные способы передачи консольным программам команд и получения результатов их выполнения?

Последний раз редактировалось Олег*; 20.02.2016 в 20:09.
Олег* вне форума Ответить с цитированием
Старый 20.02.2016, 21:04   #35
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

В любых языках можно писать в stdin другого процесса и читать из его stdout (либо через API ОС, например WinAPI, либо через обертку языка/библиотек над ним, если есть), но это не самый удобный способ взаимодействия в любом случае. Обычно если предполагается такое взаимодействие, то авторы предоставляют какое-то API (например в виде библиотеки).

Скиньте пример оболочки для этого движка.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 20.02.2016, 21:46   #36
Олег*
Пользователь
 
Регистрация: 07.01.2010
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
В любых языках можно писать в stdin другого процесса и читать из его stdout (либо через API ОС, например WinAPI, либо через обертку языка/библиотек над ним, если есть), но это не самый удобный способ взаимодействия в любом случае.
Ну вот, наверно, это и нужно, потому что в спецификации этого формата написано вот так:

Цитата:
Формат UCI (Universal Chess Interface) используется для взаимодействия шахматных движков с их графическими оболочками. Шахматный движок представляет собой обычное приложение (чаще всего консольное). Оно получает различные команды по стандартному устройству ввода (stdin), как-то их обрабатывает и результат подаёт на стандартное устройство вывода (stdout).

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Обычно если предполагается такое взаимодействие, то авторы предоставляют какое-то API (например в виде библиотеки).
Ну а как же это узнать-то? Или надо внутрь кода самого движка влезать? И хотя исходники открыты,
https://stockfishchess.org/download/

я в них разобраться все равно не смогу, потому что, как я понимаю, они написаны на си, а у меня арсенал вот такой:

Цитата:
Сообщение от Олег* Посмотреть сообщение
Да, к слову. Я неплохо (как любитель) программирую на VB6, на VBA Excel, на Power Basic и совсем немного на Ассемблере. С VBS знаком совсем-совсем немного.
Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Скиньте пример оболочки для этого движка.
Вы имеете в виду пример той оболочки, которую я собираюсь делать? Но это тогда, наверно, только не раньше чем через месяц получится сделать, потому что я сейчас вообще "не в теме", поскольку уже больше года программированием вообще не занимался, более важные дела по жизни были, а профессионально я с этой областью деятельности никак не связан. Поэтому надо будет сначала вспомнить что к чему и нужные проги на комп установить, а то сейчас он у меня совсем под другие дела "заточен".
Олег* вне форума Ответить с цитированием
Старый 20.02.2016, 22:14   #37
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Не, чужой существующей оболочки. Они ж существуют?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 20.02.2016, 22:38   #38
Олег*
Пользователь
 
Регистрация: 07.01.2010
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Не, чужой существующей оболочки. Они ж существуют?
Ну это запроста. Вот хотя бы белорусскую Кветку скачайте. Она бесплатная, очень симпатичная, да и к тому же это именно они всё так подробно разъясняют про формат UCI и всё прочее. К этой оболочке можно любые движки "прикручивать".
http://kvetka.org/

Но только она не под игру заточена, а именно под анализ позиций, что мне, собственно, сейчас и нужно. В принципе, достаточно и этой проги, на самом-то деле. Но всё равно хочется что-нибудь своё сделать, чтобы там было только то, что нужно мне и ничего такого, что "нужно всем", то есть ничего лишнего

Последний раз редактировалось Олег*; 20.02.2016 в 22:48.
Олег* вне форума Ответить с цитированием
Старый 20.02.2016, 23:35   #39
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Видимо да, просто через stdin/out, судя по тому, что ей нужен .ехе движка и описанию формата http://kvetka.org/UCI_format.shtml
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помощь с консольным приложением VB Мария студентка Помощь студентам 3 03.12.2014 20:17
Работа с консольным приложением в Pascal djquins Помощь студентам 1 15.12.2013 16:04
Взаимодействие с консольным приложением RADEM C# (си шарп) 3 29.04.2013 21:59
работа с консольным java приложением (win32) D][mon C# (си шарп) 1 11.02.2012 14:30
Работа со сторонним консольным приложением Recart Общие вопросы Delphi 3 01.12.2010 01:22