nixp.ru v3.0

27 мая 2017,
суббота,
18:46:04 MSK

DevOps с компанией «Флант»
Oluka написала 20 апреля 2007 года в 12:52 (430 просмотров) Ведет себя как женщина; открыла 2 темы в форуме, оставила 63 комментария на сайте.

Всем привет! и заранее спасибо за внимание!!!

У нас весьма веселый препод, который хочет, чтобы мы сделали игру. Но суть не в этом, а в том, что он хочет, чтобы мы построили эту игру именно тем способом, который он описал.

Игра: я играю с компом на поле N*N точек, необходимо точками окружать квадратики. Победа за тем, у кого в итоге квадратиков больше.

Он предлагает, чтобы компьютер просчитывал ходы таким образом: строится древо игры, которое представляет собой совокупность ВСЕХ возможных ходов, следующих друг за другом. (Но сами понимаете, уже на поле 5*5 количество узлов дерева достигнет неимоверного количества).

Чтобы не было такого геморроя, он предлагает ввести какую-то оценочную функцию, которая будет просчитывать «выгоду», которую компьютер получит от хода.

Так вот, у меня 2 вопроса:

-1- может быть я что-то не так поняла?

-2- что может представлять собой эта оценочная функция, чтобы сделать нереальную реализацию дерева игры реальной???(прошу прощения за каламбур)

metal

Довольно продвинутый препод:), у моих таких помыслов не было.

1) Ты все верно поняла.

2) Функция должна оценивать «выгоду», как ты сама и написала. Это классический алгоритм логических игр. Помнится в журнале программист это рассматривалось с точки зрения шахмат, если есть возможность попробуй найти.

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

На примере шахмат, абсолютно тупая функция оценки:

если ты этим ходом ставишь под бой не защищенную фигуру — оценка 0 иначе 1.

Oluka

Спасибо, значит я все-таки что-то понять еще могу))) Постараюсь найти журнал.

а ты не знаешь, где еще я могу найти материал по теме построения оценочной функции?

Anarchist
Oluka
а ты не знаешь, где еще я могу найти материал по теме построения оценочной функции?

Не беги впереди паровоза.

Прежде чем пытаться сформировать оценочную функцию нужно определиться с принципом игры.

А за этой логикой — к преподу. С напильником (сей инструмент очень хорошо подстёгивает и красноречие, и мыслительную деятельность).

Для преферанса алгоритм набросать можно.

И даже не слишком сложно.

Oluka

Преподавателем предложено поступить так:

«выгоду» оцениваем от -10 до 10 (соответственно проигрыш и выиграш), строим ВСЕ дерево, проставляем в последних листах, соответственно, числа, а дальше, двигаясь к корню с помощью оценочной функции проставляем числа во всех остальных узлах, и только после этого компьютер решает, исходя из чисел, куда сходить.

Т.е. фактически в первую очередь надо определиться с оценочной функцией(((

Oluka

А про напильник это VERY GOOD но только, мне кажется, ему уже терять нечего…

Oluka

Логика… Он хочет, чтобы единственной логикой была выгода… Вот я и думаю, как объединить его требования и реальность… ужасно((( 0_о

Anarchist
Oluka
Логика… Он хочет, чтобы единственной логикой была выгода… Вот я и думаю, как объединить его требования и реальность… ужасно((( 0_о

Тогда пусть он потрудится представить алгоритм на основании которого можно строить оценочную функцию.

Ибо из наличных данных следует только бредовость задачи.

Oluka
А про напильник это VERY GOOD но только, мне кажется, ему уже терять нечего…

Ну…

Это не единственное средство.

Есть ещё, например, терморектальный криптоанализ.

Oluka

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

Уровень сложности игры будет зависеть от уровня просчета дерева?

Oluka

И, чтобы сократить прожорливость программы, от каждого хода игрока делать только одного сына — самого выгодного…

Oluka

Вот как бывает иногда — один сидишь, думаешь, ничего не можешь придумать. А начнешь обсуждать с кем-нибудь, так сразу что-нибудь начинает рождаться))

Так что всем советую)))

metal

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

Oluka

То есть мои рассуждения, произведенные с подачи общественности, верны??? Ура))))

metal

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

Про точки (что я сразу вижу): если одной точки поставить три в ряд, то их не воможно начать окружать без еще одной точки. Это может быть одним из критериев. Можно интуитивно вывести аксиомы которых должен придерживаться игрок в данную игру и на основании их придумать алгоритм оценочной функции.

Oluka

Хорошо, подумаю… Будет что-нибуть новенькое в мыслях моего гениального препода, обязательно напишу. Или если найду что-нибудь полезное)))

Anarchist
metal
В твоей игре можно построить математическую модель, но это сложно, думаю для лабы это точно не нужно.

Правильно.

Для лабы математическую модель должен представлять препод!

Oluka

К сожалению, у нашего препода на все один ответ — ты программист, ты и разбирайся! Хотя наверное это и правильно, потому что нужно учиться своей головой думать…

Anarchist
Oluka
К сожалению, у нашего препода на все один ответ — ты программист, ты и разбирайся!

Именно!!!

Только ПРОГРАММИСТУ положено разбираться в ПРОГРАММИРОВАНИИ.

Желание повесить на него же изучение предметной области и постановку задачи понятно и объяснимо.

Но у него есть уйма побочных эффектов.

Этот препод явно не попадал в шкуру программиста как он её описывает для случая ОТВЕТСТВЕННОЙ работы с аналогичной по информативности «постановкой» задачи.

Можно пожелать ему исправить сей недостаток.

Oluka
Хотя наверное это и правильно, потому что нужно учиться своей головой думать…

Думать своей головой — это одно.

А обеспечивать разным дармоедам (существование которых оплачивается куда лучше твоего) возможность сохранения тепла и уюта (т.е. выполнение ЧУЖИХ должностных обязанностей вместо тех, кому это положено по штатному расписанию) — это совершенно другое.

Oluka
Anarchist
А обеспечивать разным дармоедам (существование которых оплачивается куда лучше твоего) возможность сохранения тепла и уюта (т.е. выполнение ЧУЖИХ должностных обязанностей вместо тех, кому это положено по штатному расписанию) — это совершенно другое.

Правильно, Пусть они тоже думают СВОЕЙ головой)))

Кстати, ты сам что можешь добавить к нашим «думам» по теме той самой игрульки?

Как считаешь, если я по уровням сложности сделаю так:

простая — просчет на 3 хода вперед

средняя — просчет на 7 ходов вперед

сложная — просчет на 11-12 ходов

это нормально будет? адекватно?

Anarchist
Oluka
Кстати, ты сам что можешь добавить к нашим «думам» по теме той самой игрульки?

Да в общем-то повторю что говорил в самом начале:

совершенно непонятна модель которая сколько-нибудь правдоподобно описывает действия игрока (и соответственно на которую всё завязано).

Так как задача поставлена построить оценочную функцию и написать программу, но при этом отсутствует узловой момент исходных данных — описание модели; налицо — неадекватность преподавателя.

Если он не хочет исправляться — идеальным было бы разогнать его на попытаться показать пути решения задачи (перед этим полезно попрактиковаться в данной игрушке).

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

После демонстрации несостоятельности второй попытки (идеальный случай — удалось разогнать) — маляву на имя декана, что такой-то преподаватель вместо обучения заставляет страдать фигнёй и прививает привычку к коекакерству.

Oluka
Как считаешь, если я по уровням сложности сделаю так:

простая — просчет на 3 хода вперед

средняя — просчет на 7 ходов вперед

сложная — просчет на 11-12 ходов

это нормально будет? адекватно?

Насколько я представляю себе эту игру (и исходя из моих критериев качества) даже на поле 5х5 просчёт на три хода смысла не имеет.

И (строго говоря) по хорошему глубина просчёта для определённого уровня сложности должна варьироваться в зависимости от размеров поля.

Но это — только общие соображения.

Для перехода к конкретике нужно определиться с моделью.

Oluka

угумс, только у меня вопрос — я не совсем поняла, что ты имеешь в виду под «моделью»?

Anarchist
Oluka
угумс, только у меня вопрос — я не совсем поняла, что ты имеешь в виду под «моделью»?

Математическая (и/или логическая) модель описывающая действия игрока для достижения победы в игре.

Грубо говоря: как играть-то?

Примерно тот же набор граблей (и соответствующий результат) при попытках написания компьютерных версий азартных карточных игр.

Oluka
Oluka
А может быть не строить дерево до конца, а просчитывать его только до какого-то уровня, и в качестве оценочной функции брать числа уже захваченных к этому моменту квадратов.

Уровень сложности игры будет зависеть от уровня просчета дерева?

это я говорила как раз про модель. Компьютер буде двигаться по дереву не исходя из каких-то логических «умозаключений», а именно из того числа очков, которые он в перспективе может получить. Это и проще, и, как мне кажется, преподу больше ничего и не надо… (хотя я вообще его не понимаю)

metal

Главный вопрос как оценить это количество очков — это и есть оценочная функция или умозаключения как не назови.

Oluka

Хорошо, значит и тут все нормально. В общем-то я этот вопрос для себя решила (или в процессе решения…)

)))

пасибки))

И еще вопрос, что вы посоветуете исбользовать в качестве графической библиотеки, если сначала мне надо эту игру сделать под Винду, а потом переиначить под Unix?

splinter

ClanLib? :)

metal

qt на мой взгляд подойдет, сразу под две платформы.

Anarchist
Oluka
И еще вопрос, что вы посоветуете исбользовать в качестве графической библиотеки, если сначала мне надо эту игру сделать под Винду, а потом переиначить под Unix?

Нет.

Такой подход порочен по своей сути.

Таких преподов не можно, а должно наказывать.

Никаких вынь-версий!!!

Если написано в задании — горе преподу.

Иначе — исключительно POSIX.

В идеале (если модификация проста) — заточенный под gcc-2.95 :)))

Хочешь GUI — gtk/qt по вкусу.

Но ИМХО здесь достаточно псевдографики.

myst

Anarchist, а нигде не говорилось, что это лаба по UNIX. Может этот предмет называется «Принципы разработки переносимого ПО"?

Anarchist
myst
Anarchist, а нигде не говорилось, что это лаба по UNIX. Может этот предмет называется «Принципы разработки переносимого ПО"?

Про выньдоуз — тоже.

И я не думаю, что возникнут проблемы с переносимостью в рамках POSIX.

Иначе нехай препод ищет РАЗУМНЫЕ обоснования необходимости приспособляться к потоку сознания разработчиков не желающих следовать стандартам.

myst

Oluka, вроде бы не выказывала явного желания девелопить под UNIX. Пусть делает так, как ей удобнее.

Anarchist
myst
Oluka, вроде бы не выказывала явного желания девелопить под UNIX. Пусть делает так, как ей удобнее.

На самом деле я не вижу принципа который описывает логику игры.

И есть у меня смутное предположение, что разработка такого принципа для общего случая всяко лежит вне рамок курса и на ступеньку-другую превосходит квалификацию задавшего задачу препода.

Соответственно мои рекомендации входят в перечень мер по возвращению преподу любезности.

Только и всего.

ЗЫ: А неявное желание следует из названия ресурса :)

myst

;) Так а как называется курс?

Oluka

курс называется «Технология программирования», а преподу надо только под винду. Под Юних мне самой нужна программа.

В общем у меня вопросы

1) как вы думаете, какие проблемы могут возникнуть при импортировании с винды на юних

2) как их уже избегали

8)))

Oluka

А по поводу курса, мы там изучаем… построение бинарных деревьев(зачем, когда это и так сотню раз было?) и их вращение… и всякую подобную муть)))

metal
Oluka
В общем у меня вопросы

1) как вы думаете, какие проблемы могут возникнуть при импортировании с винды на юних

Наверное портирование имелось в виду.

2) как их уже избегали

8)))

Зависит от того каким образом ты это будешь делать.

Например может быть проблема с кодировками.

Anarchist
metal
Наверное портирование имелось в виду.

Незачёт.

Написание переносимых программ.

Которые (в идеале) собираются без заметных модификаций на нескольких платформах.

Anarchist
Oluka
А по поводу курса, мы там изучаем… построение бинарных деревьев(зачем, когда это и так сотню раз было?) и их вращение… и всякую подобную муть)))

Чудненько.

Т.е. алгоритмизация (во что утыкаешься при попытке качественного решения поставленной задачи) к предмету не относится никаким боком.

Следовательно: дураков надо наказывать.

Предельно жестоко.

Действия следующие:

Подойти к преподавателю и попросить описать ЛОГИКУ игры исходя из которой будут строиться оченочные функции.

Внятного ответа не будет. Хотя не уверен, что ты сможешь на лету отследить все логические ошибки.

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

Если же тебе интересно разобраться в предмете (ну и в написании переносимых программ) — милости просим.

Предложения следующие:

1. Эта тема с чистой совестью сносится во флейм.

2. На задание кладётся болт.

3. Решается та же задача, но не для маразма предложенного дураком-преподом, а для куда более понятной модели игры в реверси.

4. Заводится тема посвящённая построению логической модели игры. В соответствующем разделе, потому как это ещё не программирование.

Anarchist
Oluka
курс называется «Технология программирования», а преподу надо только под винду. Под Юних мне самой нужна программа.

Мне совершенно не интересно что там нужно преподу.

Вопрос: в каких документах это прописано и как обосновывается?

Если — только потому что привычно и известно преподу, то его можно (даже нужно) очень хорошо натянуть:

1. Под выньдоуз говорите? А если у меня нет выньдоуз? И денег покупать его тоже нет! И времени/денег на поиск/трафик софта для разработки под выньдоуз тоже нет.

Ответ в идеале записывается на диктофон (материальные свидетельства лишними не бывают).

2. После чего — заказное письмо (с уведомлением о вручении) в российское представительство мелкосовта с жалобой на то, что такой-то преподаватель такого-то учебного заведения стимулирует пиратство.

Oluka
В общем у меня вопросы

1) как вы думаете, какие проблемы могут возникнуть при импортировании с винды на юних

2) как их уже избегали

8)))

Не знаю что там с qt под выньдоуз.

Если таки стремиться следовать стандартам (что повлечёт за собой необходимость установки дополнительного ПО под выньдоуз), то едва ли возникнет много проблем.

Oluka
Anarchist
Предложения следующие:

1. Эта тема с чистой совестью сносится во флейм.

2. На задание кладётся болт.

3. Решается та же задача, но не для маразма предложенного дураком-преподом, а для куда более понятной модели игры в реверси.

4. Заводится тема посвящённая построению логической модели игры. В соответствующем разделе, потому как это ещё не программирование.

В принципе можно, мне не жалко))) Тем более что, в принципе, ответ на поставленный изначально вопрос я получила. Когда уже дойдет дело до того, что надо что-то переделывать, тогда и можно будет продолжить обсуждение)))

Oluka

Да, и еще, на задание положить болт не получится(((

Но хочется….)))

Anarchist
Oluka
Да, и еще, на задание положить болт не получится(((

Но хочется….)))

Мне казалось, что я достаточно подробно показал как это делается.

Пусть преподаватель САМ ПОКАЖЕТ как решается предложенная им задачка.

И на собственной шкуре убедться в том, что если пытаться её не абы как, то упрёшься задолго до достижения читаемой им предметной области.

Потому категорические рекомендую в итоге настоять на замене предложенной им игрушки на что-то более внятное и формализуемое. Например реверси.

Oluka

))))))) На все что только можно он говорит, мне вообще наплевать, меня попросили, я веду у вас лекции. Не нравится? Уйду и по фиг)))

Ладно, разберемся! Не пропадем!

Anarchist
Oluka
))))))) На все что только можно он говорит, мне вообще наплевать, меня попросили, я веду у вас лекции. Не нравится? Уйду и по фиг)))

Попил Баблосов.

Всё ясно.

В таком случае:

1. Рулит только самообразование.

2. Можно легко забить на задание в предложенной преподом формулировке и решать его же для случая реверси.

Если препод будет рыпаться — предложить ему представить репрезетативную модель предложенной им игрушки, либо заткнуться и принять для рассмотренного случая.

А вообще, с такими формулировками и таким отношением к преподаванию большого смысла в этом курсе не вижу.

Oluka

1) самообразованием и занимаюсь (частью которого является обсуждение проблемы с вами, а не с ним)

2) реверси — ?

Oluka
Anarchist
А вообще, с такими формулировками и таким отношением к преподаванию большого смысла в этом курсе не вижу.

Я тоже не вижу)

Anarchist
Oluka
2) реверси — ?

Эх ты…

http://www.gafol.net/rules/reversi/8×8.html

http://en.wikipedia.org/wiki/Reversi

Можно и исходники частных реализаций почитать:

kde-base/kreversi

Oluka

))) пасиб)))

Oluka

Кстати, тему действительно пора во Флейм, ибо наша болтология о несправедливости преподов ушла далеко от темы раздела…

Мне даже как-то неудобно…

Anarchist
Oluka
))) пасиб)))

Пожалуйста.

Первая ссылка, последний комментарий — интереснейшее дополнительное условие для формирования оценочной функции.

Милости просим в отдельную тему :)

Oluka

Кстати, если кому интересно… Мне так и не пришлось эту лабуду делать… Он меня освободил, за то что я за него лекции вела))

Code Monkey

гы :)