Всем привет! и заранее спасибо за внимание!!!
У нас весьма веселый препод, который хочет, чтобы мы сделали игру. Но суть не в этом, а в том, что он хочет, чтобы мы построили эту игру именно тем способом, который он описал.
Игра: я играю с компом на поле N*N точек, необходимо точками окружать квадратики. Победа за тем, у кого в итоге квадратиков больше.
Он предлагает, чтобы компьютер просчитывал ходы таким образом: строится древо игры, которое представляет собой совокупность ВСЕХ возможных ходов, следующих друг за другом. (Но сами понимаете, уже на поле 5*5 количество узлов дерева достигнет неимоверного количества).
Чтобы не было такого геморроя, он предлагает ввести какую-то оценочную функцию, которая будет просчитывать «выгоду», которую компьютер получит от хода.
Так вот, у меня 2 вопроса:
-1- может быть я что-то не так поняла?
-2- что может представлять собой эта оценочная функция, чтобы сделать нереальную реализацию дерева игры реальной???(прошу прощения за каламбур)
Последние комментарии
- OlegL, 17 декабря 2023 года в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
Довольно продвинутый препод:), у моих таких помыслов не было.
1) Ты все верно поняла.
2) Функция должна оценивать «выгоду», как ты сама и написала. Это классический алгоритм логических игр. Помнится в журнале программист это рассматривалось с точки зрения шахмат, если есть возможность попробуй найти.
В общих чертах. Как может компьютер играть в игры? Он ведь не умеет думать, самый простой способ перебирать все варианты. Это не возможно когда вариантов слишком много. Поэтому надо отсекать заведомо проигрышные варианты, для этого делают оценочную функцию т.е все возможные ходы оцениваются и выбирается из них ход с наибольшой оценкой. Алгоритм работы этой оценочной функции и есть главная фишка твоей игры.
На примере шахмат, абсолютно тупая функция оценки:
если ты этим ходом ставишь под бой не защищенную фигуру — оценка 0 иначе 1.
Спасибо, значит я все-таки что-то понять еще могу))) Постараюсь найти журнал.
а ты не знаешь, где еще я могу найти материал по теме построения оценочной функции?
Не беги впереди паровоза.
Прежде чем пытаться сформировать оценочную функцию нужно определиться с принципом игры.
А за этой логикой — к преподу. С напильником (сей инструмент очень хорошо подстёгивает и красноречие, и мыслительную деятельность).
Для преферанса алгоритм набросать можно.
И даже не слишком сложно.
Преподавателем предложено поступить так:
«выгоду» оцениваем от -10 до 10 (соответственно проигрыш и выиграш), строим ВСЕ дерево, проставляем в последних листах, соответственно, числа, а дальше, двигаясь к корню с помощью оценочной функции проставляем числа во всех остальных узлах, и только после этого компьютер решает, исходя из чисел, куда сходить.
Т.е. фактически в первую очередь надо определиться с оценочной функцией(((
А про напильник это VERY GOOD но только, мне кажется, ему уже терять нечего…
Логика… Он хочет, чтобы единственной логикой была выгода… Вот я и думаю, как объединить его требования и реальность… ужасно((( 0_о
Тогда пусть он потрудится представить алгоритм на основании которого можно строить оценочную функцию.
Ибо из наличных данных следует только бредовость задачи.
Ну…
Это не единственное средство.
Есть ещё, например, терморектальный криптоанализ.
А может быть не строить дерево до конца, а просчитывать его только до какого-то уровня, и в качестве оценочной функции брать числа уже захваченных к этому моменту квадратов.
Уровень сложности игры будет зависеть от уровня просчета дерева?
И, чтобы сократить прожорливость программы, от каждого хода игрока делать только одного сына — самого выгодного…
Вот как бывает иногда — один сидишь, думаешь, ничего не можешь придумать. А начнешь обсуждать с кем-нибудь, так сразу что-нибудь начинает рождаться))
Так что всем советую)))
Основная идея как раз не строить все дерево целиком, а то бред какой-то получается. Построить дерево целиком, чтобы потом по нему просто ходить. Обычно дерево строится на определенную глубину, причем явно проигрышные пути сразу отбрасываются.
То есть мои рассуждения, произведенные с подачи общественности, верны??? Ура))))
В твоей игре можно построить математическую модель, но это сложно, думаю для лабы это точно не нужно. Важен сам принцип.
Про точки (что я сразу вижу): если одной точки поставить три в ряд, то их не воможно начать окружать без еще одной точки. Это может быть одним из критериев. Можно интуитивно вывести аксиомы которых должен придерживаться игрок в данную игру и на основании их придумать алгоритм оценочной функции.
Хорошо, подумаю… Будет что-нибуть новенькое в мыслях моего гениального препода, обязательно напишу. Или если найду что-нибудь полезное)))
Правильно.
Для лабы математическую модель должен представлять препод!
К сожалению, у нашего препода на все один ответ — ты программист, ты и разбирайся! Хотя наверное это и правильно, потому что нужно учиться своей головой думать…
Именно!!!
Только ПРОГРАММИСТУ положено разбираться в ПРОГРАММИРОВАНИИ.
Желание повесить на него же изучение предметной области и постановку задачи понятно и объяснимо.
Но у него есть уйма побочных эффектов.
Этот препод явно не попадал в шкуру программиста как он её описывает для случая ОТВЕТСТВЕННОЙ работы с аналогичной по информативности «постановкой» задачи.
Можно пожелать ему исправить сей недостаток.
Думать своей головой — это одно.
А обеспечивать разным дармоедам (существование которых оплачивается куда лучше твоего) возможность сохранения тепла и уюта (т.е. выполнение ЧУЖИХ должностных обязанностей вместо тех, кому это положено по штатному расписанию) — это совершенно другое.
Правильно, Пусть они тоже думают СВОЕЙ головой)))
Кстати, ты сам что можешь добавить к нашим «думам» по теме той самой игрульки?
Как считаешь, если я по уровням сложности сделаю так:
простая — просчет на 3 хода вперед
средняя — просчет на 7 ходов вперед
сложная — просчет на 11-12 ходов
это нормально будет? адекватно?
Да в общем-то повторю что говорил в самом начале:
совершенно непонятна модель которая сколько-нибудь правдоподобно описывает действия игрока (и соответственно на которую всё завязано).
Так как задача поставлена построить оценочную функцию и написать программу, но при этом отсутствует узловой момент исходных данных — описание модели; налицо — неадекватность преподавателя.
Если он не хочет исправляться — идеальным было бы разогнать его на попытаться показать пути решения задачи (перед этим полезно попрактиковаться в данной игрушке).
Согласно наиболее вероятному сценарию, ни с первой, ни со второй попытки предоставить адекватную модель он не сможет.
После демонстрации несостоятельности второй попытки (идеальный случай — удалось разогнать) — маляву на имя декана, что такой-то преподаватель вместо обучения заставляет страдать фигнёй и прививает привычку к коекакерству.
Насколько я представляю себе эту игру (и исходя из моих критериев качества) даже на поле 5х5 просчёт на три хода смысла не имеет.
И (строго говоря) по хорошему глубина просчёта для определённого уровня сложности должна варьироваться в зависимости от размеров поля.
Но это — только общие соображения.
Для перехода к конкретике нужно определиться с моделью.
угумс, только у меня вопрос — я не совсем поняла, что ты имеешь в виду под «моделью»?
Математическая (и/или логическая) модель описывающая действия игрока для достижения победы в игре.
Грубо говоря: как играть-то?
Примерно тот же набор граблей (и соответствующий результат) при попытках написания компьютерных версий азартных карточных игр.
это я говорила как раз про модель. Компьютер буде двигаться по дереву не исходя из каких-то логических «умозаключений», а именно из того числа очков, которые он в перспективе может получить. Это и проще, и, как мне кажется, преподу больше ничего и не надо… (хотя я вообще его не понимаю)
Главный вопрос как оценить это количество очков — это и есть оценочная функция или умозаключения как не назови.
Хорошо, значит и тут все нормально. В общем-то я этот вопрос для себя решила (или в процессе решения…)
)))
пасибки))
И еще вопрос, что вы посоветуете исбользовать в качестве графической библиотеки, если сначала мне надо эту игру сделать под Винду, а потом переиначить под Unix?
ClanLib? :)
qt на мой взгляд подойдет, сразу под две платформы.
Нет.
Такой подход порочен по своей сути.
Таких преподов не можно, а должно наказывать.
Никаких вынь-версий!!!
Если написано в задании — горе преподу.
Иначе — исключительно POSIX.
В идеале (если модификация проста) — заточенный под gcc-2.95 :)))
Хочешь GUI — gtk/qt по вкусу.
Но ИМХО здесь достаточно псевдографики.
Anarchist, а нигде не говорилось, что это лаба по UNIX. Может этот предмет называется «Принципы разработки переносимого ПО"?
Про выньдоуз — тоже.
И я не думаю, что возникнут проблемы с переносимостью в рамках POSIX.
Иначе нехай препод ищет РАЗУМНЫЕ обоснования необходимости приспособляться к потоку сознания разработчиков не желающих следовать стандартам.
Oluka, вроде бы не выказывала явного желания девелопить под UNIX. Пусть делает так, как ей удобнее.
На самом деле я не вижу принципа который описывает логику игры.
И есть у меня смутное предположение, что разработка такого принципа для общего случая всяко лежит вне рамок курса и на ступеньку-другую превосходит квалификацию задавшего задачу препода.
Соответственно мои рекомендации входят в перечень мер по возвращению преподу любезности.
Только и всего.
ЗЫ: А неявное желание следует из названия ресурса :)
;) Так а как называется курс?
курс называется «Технология программирования», а преподу надо только под винду. Под Юних мне самой нужна программа.
В общем у меня вопросы
1) как вы думаете, какие проблемы могут возникнуть при импортировании с винды на юних
2) как их уже избегали
8)))
А по поводу курса, мы там изучаем… построение бинарных деревьев(зачем, когда это и так сотню раз было?) и их вращение… и всякую подобную муть)))
Наверное портирование имелось в виду.
Зависит от того каким образом ты это будешь делать.
Например может быть проблема с кодировками.
Незачёт.
Написание переносимых программ.
Которые (в идеале) собираются без заметных модификаций на нескольких платформах.
Чудненько.
Т.е. алгоритмизация (во что утыкаешься при попытке качественного решения поставленной задачи) к предмету не относится никаким боком.
Следовательно: дураков надо наказывать.
Предельно жестоко.
Действия следующие:
Подойти к преподавателю и попросить описать ЛОГИКУ игры исходя из которой будут строиться оченочные функции.
Внятного ответа не будет. Хотя не уверен, что ты сможешь на лету отследить все логические ошибки.
После второй демонстрации преподу несостоятельностиего построений (а для общего случая — практически достоверный факт) — письмо на имя декана с заявлением, что такой-то преподаватель даёт задания не вписывающиеся в программу курса и при этом не утруждает себя ни корректной формулировкой, ни предоставлением достаточных исходных данных для решения задачи в рамках курса.
Если же тебе интересно разобраться в предмете (ну и в написании переносимых программ) — милости просим.
Предложения следующие:
1. Эта тема с чистой совестью сносится во флейм.
2. На задание кладётся болт.
3. Решается та же задача, но не для маразма предложенного дураком-преподом, а для куда более понятной модели игры в реверси.
4. Заводится тема посвящённая построению логической модели игры. В соответствующем разделе, потому как это ещё не программирование.
Мне совершенно не интересно что там нужно преподу.
Вопрос: в каких документах это прописано и как обосновывается?
Если — только потому что привычно и известно преподу, то его можно (даже нужно) очень хорошо натянуть:
1. Под выньдоуз говорите? А если у меня нет выньдоуз? И денег покупать его тоже нет! И времени/денег на поиск/трафик софта для разработки под выньдоуз тоже нет.
Ответ в идеале записывается на диктофон (материальные свидетельства лишними не бывают).
2. После чего — заказное письмо (с уведомлением о вручении) в российское представительство мелкосовта с жалобой на то, что такой-то преподаватель такого-то учебного заведения стимулирует пиратство.
Не знаю что там с qt под выньдоуз.
Если таки стремиться следовать стандартам (что повлечёт за собой необходимость установки дополнительного ПО под выньдоуз), то едва ли возникнет много проблем.
В принципе можно, мне не жалко))) Тем более что, в принципе, ответ на поставленный изначально вопрос я получила. Когда уже дойдет дело до того, что надо что-то переделывать, тогда и можно будет продолжить обсуждение)))
Да, и еще, на задание положить болт не получится(((
Но хочется….)))
Мне казалось, что я достаточно подробно показал как это делается.
Пусть преподаватель САМ ПОКАЖЕТ как решается предложенная им задачка.
И на собственной шкуре убедться в том, что если пытаться её не абы как, то упрёшься задолго до достижения читаемой им предметной области.
Потому категорические рекомендую в итоге настоять на замене предложенной им игрушки на что-то более внятное и формализуемое. Например реверси.
))))))) На все что только можно он говорит, мне вообще наплевать, меня попросили, я веду у вас лекции. Не нравится? Уйду и по фиг)))
Ладно, разберемся! Не пропадем!
Попил Баблосов.
Всё ясно.
В таком случае:
1. Рулит только самообразование.
2. Можно легко забить на задание в предложенной преподом формулировке и решать его же для случая реверси.
Если препод будет рыпаться — предложить ему представить репрезетативную модель предложенной им игрушки, либо заткнуться и принять для рассмотренного случая.
А вообще, с такими формулировками и таким отношением к преподаванию большого смысла в этом курсе не вижу.
1) самообразованием и занимаюсь (частью которого является обсуждение проблемы с вами, а не с ним)
2) реверси — ?
Я тоже не вижу)
Эх ты…
http://www.gafol.net/rules/reversi/8×8.html
http://en.wikipedia.org/wiki/Reversi
Можно и исходники частных реализаций почитать:
kde-base/kreversi
))) пасиб)))
Кстати, тему действительно пора во Флейм, ибо наша болтология о несправедливости преподов ушла далеко от темы раздела…
Мне даже как-то неудобно…
Пожалуйста.
Первая ссылка, последний комментарий — интереснейшее дополнительное условие для формирования оценочной функции.
Милости просим в отдельную тему :)
Кстати, если кому интересно… Мне так и не пришлось эту лабуду делать… Он меня освободил, за то что я за него лекции вела))
гы :)