Лабораторные работы (2011) (Отчет СИМПР Шутова)

Посмотреть архив целиком

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













Отчет по лабораторной работе №1

по предмету

«Теория игр и исследование операций»













Выполнила: Шутова Екатерина

Группа: А-13-07

Преподаватель: Еремеев А.П.,

Гречкина П.В.





Москва, 2011

Оглавление

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

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

Интерфейс программы 4

Таблицы в среде СИМПР 5

Пример работы программы 8

Результат трансляции 8

Приложение 9

Цикл обработки сообщений 9

Код класса, реализующий человека, который хочет оплатить 12

Заключение 15

Литература: 15




































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

Разработать табличную модель принятия решений в среде СИМПР и имитационный модуль программы.

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

Есть помещение, в котором стоят 3 стула (с компьютерами), где можно посидеть, и терминал, в котором можно совершить операцию оплаты.

Объекты:

  • человек, который хочет совершить операцию оплаты;

  • человек, которому нужно найти информацию в интернете (т.е. сесть за компьютер)

Правила:

  1. Для человека, который хочет совершить операцию оплаты.

Операцию оплаты можно совершить в терминале, у которого «есть» очередь. Размер очереди – 4, т.е. ждать, пока освободиться терминал, могут одновременно 4 человека. Как только человек доходит до конца очереди, он:

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

-если свободного места в очереди нет, тогда сразу выходит из кафе.

2. Для человека, который хочет посидеть за компьютером.

В помещении есть 3 компьютера с рядом стоящими стульями. Цель человека – сесть на свободный стул, поискать нужную ему информацию (подождать некоторый промежуток времени) и уйти.

Если свободных стульев он не нашел, то сразу выходит и не ждет, пока освободится стул.

Данная область описана тремя таблицами. Ниже приведены сами таблицы, реализованные в среде СИМПР.









Интерфейс программы

- главное окно программы

- картинка человека, который хочет посидеть:

начальный вид

вид после того, как посидит

вид, когда сидит


данная картинка рисуется на месте занятого стула

- картинка человека, который хочет совершить операцию оплаты:

начальный вид

вид после того, как оплатит









Таблицы в среде СИМПР

  1. Главная начальная таблица




2.Таблица для человека, который хочет сесть за компьютер.


Таблица полна и непротиворечива.




3.Таблица для человека, который хочет совершить операцию оплаты.

c1->!c2

c1->!c5

c1->!c6

c5->!c7

c3->!c8

c1->!c7

c2->!c7

c7->!c9


Таблица полна и непротиворечива.

Пример работы программы


Результат трансляции

Оптимизированная трансляция







Приложение

Цикл обработки сообщений

if (m.Msg == simpr)

{ wparam = Convert.ToInt32("" + m.WParam);

wparamhi = wparam / 65536;

wparamlo = wparam - wparamhi * 65536;

if (wparamhi == 0)// Условия

{

m.Result = new IntPtr(0);

if (wparamlo == 1)// Таблица 1

{

if (lParam == 1) //вопрос 1=есть ли кто на экране?

{

if (f.Is_anibody()) m.Result = new IntPtr(1);

else m.Result = new IntPtr(0);

}

else if (lParam == 2) //Все ли сделали свои дела?

{

if (f.All_is_done()) m.Result = new IntPtr(1);

else m.Result = new IntPtr(0);

}

else if (lParam == 3) //Мне надо посидеть?

{

if (f.list_of_mans[f.active_i].Get_type() == "sit") m.Result = new IntPtr(1);

else m.Result = new IntPtr(0);

}

else if (lParam == 4) //Мне надо оплатить?

{

if (f.list_of_mans[f.active_i].Get_type() == "pay") m.Result = new IntPtr(1);

else m.Result = new IntPtr(0);

} }

else if (wparamlo == 2) //Таблица 2

{

if (lParam == 1) //Я сделал меньше к шагов?

{

if (((Sit_Man)f.list_of_mans[f.active_i]).Less_k())m.Result = new IntPtr(1);

else m.Result = new IntPtr(0);

}

else if (lParam == 2) //Я около стула?

{

if (((Sit_Man)f.list_of_mans[f.active_i]).Is_near_chair())

{

m.Result = new IntPtr(1);

}

else m.Result = new IntPtr(0);

}

else if (lParam == 3) //Стул свободен?

{

if (((Sit_Man)f.list_of_mans[f.active_i]).Is_chair_free())

{

m.Result = new IntPtr(1);

}

else m.Result = new IntPtr(0);

}

else if (lParam == 4) //Стулья закончиличь?

{

if (((Sit_Man)f.list_of_mans[f.active_i]).All_chair_checked())

{

m.Result = new IntPtr(1);

}

else m.Result = new IntPtr(0);

}

else if (lParam == 5) //Я сижу?

{

if (((Sit_Man)f.list_of_mans[f.active_i]).am_i_siting)

{

m.Result = new IntPtr(1);

}

else m.Result = new IntPtr(0);

}

else if (lParam == 6) //Я насиделся (время вышло)?

{

if (((Sit_Man)f.list_of_mans[f.active_i]).Is_time_up())

{

m.Result = new IntPtr(1);

}

else m.Result = new IntPtr(0);

}

else if (lParam == 7) //Я сделал свое дело?

{

if (((Sit_Man)f.list_of_mans[f.active_i]).done) m.Result = new IntPtr(1);

else m.Result = new IntPtr(0);

}

}

else if (wparamlo == 3) //таблица 3

{

if (lParam == 1) //условие 1=Я сделал меньше m шагов?

{

if (((Pay_Man)f.list_of_mans[f.active_i]).Less_m()) m.Result = new IntPtr(1);

else m.Result = new IntPtr(0);

}

else if (lParam == 2) //Я дошел до конца очереди?

{

if (((Pay_Man)f.list_of_mans[f.active_i]).Is_near_Queue())

{

m.Result = new IntPtr(1);

}

else m.Result = new IntPtr(0);

}

else if (lParam == 3) //Есть ли место в очереди?

{

if (f.Is_free_last_spase()) m.Result = new IntPtr(1);

else m.Result = new IntPtr(0);

}

else if (lParam == 4) //Свободно ли след место в очереди?

{

if (f.Is_free_next_spase()) m.Result = new IntPtr(1);

else m.Result = new IntPtr(0);

}

else if (lParam == 5) //Я у терминала?

{

if (((Pay_Man)f.list_of_mans[f.active_i]).Am_I_near_terminal())

{

m.Result = new IntPtr(1);

}

else m.Result = new IntPtr(0);

}

else if (lParam == 6) //Я произвел оплату?

{

if (((Pay_Man)f.list_of_mans[f.active_i]).done) m.Result = new IntPtr(1);

else m.Result = new IntPtr(0);

}

else if (lParam == 7) //Я после терминала?

{

if (((Pay_Man)f.list_of_mans[f.active_i]).Am_I_after_terminal())

{

m.Result = new IntPtr(1);

}

else m.Result = new IntPtr(0);

}

else if (lParam == 8) //Очередь полна?

{

if (f.Is_queue_full()) m.Result = new IntPtr(1);

else m.Result = new IntPtr(0);

}

else if (lParam == 9) //Я стою в очереди?

{

if (((Pay_Man)f.list_of_mans[f.active_i]).Am_I_stay_in_queue())

{

m.Result = new IntPtr(1);

}

else m.Result = new IntPtr(0);

}

} }

else if (wparamhi == 1) //Действия

{

if (wparamlo == 1) //Таблица 1

{

if (lParam == 0) //Достигнуто конечное состояние

{

f.tb_Action.Text +="=======The END!=======";

}

else if (lParam == 1) //НАчать

{

f.Begin();

}

else if (lParam == 2)//Ждать,пока все выйдут

{

if (f.list_of_mans[f.active_i].Get_type() == "pay")

{

((Pay_Man)f.list_of_mans[f.active_i]).Step_right();

}

else ((Sit_Man)f.list_of_mans[f.active_i]).Step_right();

f.Next_man();

}

}

else if (wparamlo == 2) //таблица 2

{

if (lParam == 1)

{

((Sit_Man)f.list_of_mans[f.active_i]).Sit();

}

else if (lParam == 2)

{

((Sit_Man)f.list_of_mans[f.active_i]).Go_to_the_next_chair();

}

else if (lParam == 3)

{

((Sit_Man)f.list_of_mans[f.active_i]).Step_right();

}

else if (lParam == 4)

{

((Sit_Man)f.list_of_mans[f.active_i]).Sit_down();

f.tb_Action.Text += " Я сажусь \n\r";

}

else if (lParam == 5)

{

((Sit_Man)f.list_of_mans[f.active_i]).Stend_up();

}

else if (lParam == 6)

{

((Sit_Man)f.list_of_mans[f.active_i]).Get_out();

}

else if (lParam == 7) //перейти к следующему человеку

{

f.Next_man();//данное действие происходит после каждого действия

}

else if (lParam == 0)

{

f.tb_Action.Text += "ERROR on Table 2 \n\r";

}

}

else if (wparamlo == 3) //таблица 3

{

if (lParam == 1)

{

((Pay_Man)f.list_of_mans[f.active_i]).Step_right();

}

else if (lParam == 2)

{

((Pay_Man)f.list_of_mans[f.active_i]).Step_next_space_in_queue();

}

else if (lParam == 3)


Случайные файлы

Файл
60107.rtf
6660-1.rtf
ALMAZ.DOC
176894.rtf
73118-1.rtf




Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.