Отчёт (Лабораторные работы (2009))

2015-08-22СтудИзба

Описание файла

Файл "Отчёт" внутри архива находится в следующих папках: Лабораторные работы (2009), RDO-Matchs. Документ из архива "Лабораторные работы (2009)", который расположен в категории "". Всё это находится в предмете "теория игр и исследование операций" из 8 семестр, которые можно найти в файловом архиве НИУ «МЭИ» . Не смотря на прямую связь этого архива с НИУ «МЭИ» , его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "теория игр и исследование операций" в общих файлах.

Онлайн просмотр документа "Отчёт"

Текст из документа "Отчёт"

Московский Энергетический Институт

(Технический университет)











Лабораторная работа № 3.











Выполнил: ст. гр. А-13-05 Петров С. А.

Проверила: ст.преп. Гречкина П.В.

















18.04.2009.

Оглавление

Постановка задачи. - 3 -

Описание предметной области. - 3 -

Описание имитационной модели. - 4 -

Типы ресурсов. - 4 -

Ресурсы. - 4 -

Операции. - 4 -

Интерфейс. - 5 -

Файл выполнения. - 7 -

Статистика. - 7 -

Приложение. - 8 -





































Постановка задачи.

Реализовать с помощью комплекса РДО логическую игру ‘Спички’. Правила игры достаточно просты. На столе лежит N* спичек. Два игрока (один из которых компьютер) поочерёдно вытаскивают одну, две или три спички. Проигрывает тот, кто забирает последнюю спичку. В данной реализации игры, первым всегда ходит человек.

*игру можно запускать с 59>N>0, задав константу “Спичек_на_столе”

Описание предметной области.

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

Пример 1.

Пуст на столе 5 спичек, и ход игрока А.

Если игрок А возьмёт 1 спичку, то В возьмёт 3 и последняя спичка останется игроку А.

Если игрок А возьмёт 2 спички, то В возьмёт 2 и последняя спичка останется игроку А.

Если игрок А возьмёт 3 спичку, то В возьмёт 1 и последняя спичка останется игроку А.

Таким образом, видно, что тот игрок чей ход при оставшихся 5 спичках на столе проигрывает.

Пример 2.

Пуст на столе 9 спичек, и ход игрока А.

Если игрок А возьмёт 1 спичку, то В возьмёт 3 и игрок А окажется в ситуации 1 ( пример 1), которая как мы знаем проигрышная для него.

Аналогично получается, если А возьмёт 2 или 3 спички. В этих случаях В тоже оставит игрока А в проигрышной ситуации 1.

Обобщив результаты примеров, видно, что проигрышными ситуациями для ходящего являются:

1,5,9,13,17….. Таким образом, верной стратегией является всегда оставлять противника в проигрышной для него ситуации.

Описание имитационной модели.

Типы ресурсов.

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

$Resource_type КлассВремя : permanent

$Parameters

Тик : integer =0

$End

Класс игра содержит поля:

  • ОсталосьСпичек – сколько на столе осталось спичек. Как упоминалось ранее спичек может быть от 0 до 60.

  • КомпьютерУбралСпичек – сколько за свой последний ход компьютер убрал спичек. От 0 до 3.

  • ЧеловекУбралСпичек- аналогично, применительно к человеку.

  • Состояние – состояние игры 0 – НеНечата, 1-Начата, 2 – завершена, 3 – Состояние выхода из игры.

  • Победитель – 0-победителя нет,1-победил человек,-1- победил компьютер.

$Resource_type КлассИгра : permanent

$Parameters

ОсталосьСпичек : integer [0..60] = 0

КомпьютерУбралСпичек : integer [0..3] = 0

ЧеловекУбралСпичек : integer [0..3] = 0

Состояние : integer [0..3] = 0

Победитель : integer [-1..1] = 0

$End

Ресурсы.

В модели используются два ресурса: Время и Игра. Это объекты описанных выше классов.

$Resources

Время : КлассВремя *

Игра : КлассИгра * * * * *

$End

Операции.

В программе предусмотрены следующие операции:

$Operations

РегулярнаяОперация : ОбразецРегулярнойОперации

УбратьОднуСпичку : ОбразецУбратьСпички '1' 1

УбратьДвеСпички : ОбразецУбратьСпички '2' 2

УбратьТриСпички : ОбразецУбратьСпички '3' 3

НачатьИгру : ОбразецНачатьИгру 'SPACE'

ЗакончитьИгру : ОбразецКонец 'ESCAPE'

$End

РегулярнаяОперация – увеличивает Тик на 1. Остальные операции в названии содержат суть своего действия. Действия убрать спички относятся к человеку.

Интерфейс.

Используется 1 кадр анимации.

Интерфейс при первом запуске игры:

Для начала игры можно нажать пробел, либо щёлкнуть мышью по полю начать.

Интерфейс игры ‘в процессе’:

Для хода, необходимо нажать клавиши 1,2 или 3. А также можно щёлкнуть мышью по соответствующим полям.

Ситуация проигрыша:

Ситуация выигрыша:

В любой момент программы можно выйти, нажав ESC.

Файл выполнения.

Model_name = Matchs

Resource_file = Matchs

OprIev_file = Matchs

Statistic_file = Matchs

Results_file = Matchs

Trace_file = Matchs

Frame_file = Matchs

Frame_number = 1

Show_mode = Animation

Show_rate = 0.0001

Terminate_if Игра.Состояние = 3

Статистика.

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

Приложение.

Файл PAT

{Операция, для возможности осуществления анимации}

$Pattern ОбразецРегулярнойОперации : irregular_event

$Relevant_resources

_Время : Время Keep

$Time = 0

$Body

_Время

Convert_event

Тик set _Время.Тик + 1

$End

{Операция устанавливает Состояние = 3, таким образом заканчивая игру}

$Pattern ОбразецКонец : keyboard

$Relevant_resources

_Игра : Игра Keep Keep

$Time = 0.0

$Body

_Игра

Convert_begin

Состояние set 3

$End

{Человек, убирает заданное количество спичек, после чего ходит компьютер}

$Pattern ОбразецУбратьСпички : keyboard

$Parameters

Количество : integer

$Relevant_resources

_Игра : Игра Keep Keep

$Time = 0.0

$Body

_Игра

Choice NoCheck

Convert_begin

ЧеловекУбралСпичек set ХодЧеловека(_Игра.ОсталосьСпичек,Количество)

КомпьютерУбралСпичек set ХодКомпьютера(_Игра.ОсталосьСпичек - _Игра.ЧеловекУбралСпичек,1)

ОсталосьСпичек set _Игра.ОсталосьСпичек - _Игра.ЧеловекУбралСпичек - _Игра.КомпьютерУбралСпичек

Победитель set Победа(_Игра.ОсталосьСпичек,_Игра.ЧеловекУбралСпичек,_Игра.КомпьютерУбралСпичек)

Состояние set Сост(_Игра.Победитель)

$End

{Операция начинает игру, задаёт начальное количество спичек}

$Pattern ОбразецНачатьИгру : keyboard

$Relevant_resources

_Игра : Игра Keep Keep

$Time = 0.0

$Body

_Игра

Choice from _Игра.Состояние = 0 or _Игра.Состояние = 2

Convert_begin

Состояние set 1

Победитель set 0

ОсталосьСпичек set Спичек_на_столе

$End

Файл FUN

{Константа, для задания начального количества спичек на столе}

$Constant

Спичек_на_столе : integer = 18

$end

{Случайно возвращает число 1,2 или 3, для хода компьютера, когда то находится в проигрышной позиции}

$Sequence СлучойноеЧисло_1_3 : integer

$Type = by_hist 11111

$Body

1 1 0.333

1 2 0

2 2 0.334

2 3 0

3 3 0.333

$End

{Компьютер пытается поставить человека в проигрышную позицию, а если сам находится в ней то случайно берёт 1,2 или 3 спички}

$Function ХодКомпьютера : integer = 0

$Type = algorithmic

$Parameters

Осталось : integer

Итератор : integer

$Body

Calculate_if Осталось <= 0 ХодКомпьютера = 0

Calculate_if Осталось = 1 ХодКомпьютера = 1

Calculate_if Осталось = 2 ХодКомпьютера = 1

Calculate_if Осталось = 3 ХодКомпьютера = 2

Calculate_if Осталось = 4 ХодКомпьютера = 3

Calculate_if Осталось - 1 - 4*Итератор = 0 ХодКомпьютера = СлучойноеЧисло_1_3

Calculate_if Осталось - 1 - 4*Итератор <= 3 ХодКомпьютера = Осталось - 1 - 4*Итератор

Calculate_if Осталось - 1 - 4*Итератор > 3 ХодКомпьютера = ХодКомпьютера(Осталось,Итератор + 1)

$End

{Исправляет количество спичек, если человек хочет убрать больше, чем осталось}

$Function ХодЧеловека : integer = 0

$Type = algorithmic

$Parameters

Осталось : integer

Убрать : integer

$Body

Calculate_if Осталось < Убрать ХодЧеловека = Осталось

Calculate_if Осталось >= Убрать ХодЧеловека = Убрать

$End

{Проверяет есть ли победитель}

$Function Победа : integer = 0

$Type = algorithmic

$Parameters

Осталось : integer

ЧелУбрал : integer

КомпУбрал : integer

$Body

Calculate_if Осталось <> 0 Победа = 0

Calculate_if Осталось = 0 and КомпУбрал = 1 Победа = 1

Calculate_if Осталось = 0 and КомпУбрал = 0 Победа = -1

Calculate_if 1 = 1 Победа = -1

$End

{Изменяет состояние, если есть победитель}

$Function Сост : integer = 1

$Type = algorithmic

$Parameters

Победитель : integer

$Body

Calculate_if Победитель = -1 or Победитель = 1 Сост = 2

$End

Файл FRM

$Frame Frame1

$Back_picture = <128 255 200> 800 600

Show_if Игра.ОсталосьСпичек >= 60 rect[30,200,4,100,<255 255 0>,<255 255 0>]

Show_if Игра.ОсталосьСпичек >= 60 ellipse[27,196,10,8,<127 0 0>,<127 0 0>]

Show_if Игра.ОсталосьСпичек >= 60 ellipse[27,296,10,8,<127 0 0>,<127 0 0>]

Show_if Игра.ОсталосьСпичек >= 59 rect[42,200,4,100,<255 255 0>,<255 255 0>]

Show_if Игра.ОсталосьСпичек >= 59 ellipse[39,196,10,8,<127 0 0>,<127 0 0>]

Show_if Игра.ОсталосьСпичек >= 59 ellipse[39,296,10,8,<127 0 0>,<127 0 0>]

Show_if Игра.ОсталосьСпичек >= 58 rect[54,200,4,100,<255 255 0>,<255 255 0>]

Show_if Игра.ОсталосьСпичек >= 58 ellipse[51,196,10,8,<127 0 0>,<127 0 0>]

Show_if Игра.ОсталосьСпичек >= 58 ellipse[51,296,10,8,<127 0 0>,<127 0 0>]

Show_if Игра.ОсталосьСпичек >= 57 rect[66,200,4,100,<255 255 0>,<255 255 0>]

Show_if Игра.ОсталосьСпичек >= 57 ellipse[63,196,10,8,<127 0 0>,<127 0 0>]

Show_if Игра.ОсталосьСпичек >= 57 ellipse[63,296,10,8,<127 0 0>,<127 0 0>]

Show_if Игра.ОсталосьСпичек >= 56 rect[78,200,4,100,<255 255 0>,<255 255 0>]

Show_if Игра.ОсталосьСпичек >= 56 ellipse[75,196,10,8,<127 0 0>,<127 0 0>]

Show_if Игра.ОсталосьСпичек >= 56 ellipse[75,296,10,8,<127 0 0>,<127 0 0>]

Show_if Игра.ОсталосьСпичек >= 55 rect[90,200,4,100,<255 255 0>,<255 255 0>]

Show_if Игра.ОсталосьСпичек >= 55 ellipse[87,196,10,8,<127 0 0>,<127 0 0>]

Show_if Игра.ОсталосьСпичек >= 55 ellipse[87,296,10,8,<127 0 0>,<127 0 0>]

Show_if Игра.ОсталосьСпичек >= 54 rect[102,200,4,100,<255 255 0>,<255 255 0>]

Show_if Игра.ОсталосьСпичек >= 54 ellipse[99,196,10,8,<127 0 0>,<127 0 0>]

Show_if Игра.ОсталосьСпичек >= 54 ellipse[99,296,10,8,<127 0 0>,<127 0 0>]

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Нашёл ошибку?
Или хочешь предложить что-то улучшить на этой странице? Напиши об этом и получи бонус!
Бонус рассчитывается индивидуально в каждом случае и может быть в виде баллов или бесплатной услуги от студизбы.
Предложить исправление
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5137
Авторов
на СтудИзбе
441
Средний доход
с одного платного файла
Обучение Подробнее