Лабораторные работы (2011) (Lab1GT)

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

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

Кафедра прикладной математики


















Лабораторная работа №1

«Проектирование с помощью инструментального комплекса СИМПР

По предмету «Теория игр и исследование операция»







Студент:

Олег Авдиенков

Группа

А-13-07

Преподаватель:

Еремеев А.П.


















Москва 2011

Оглавление

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

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

Объекты: 2

Правила: 2

Клиент 2

Первый библиотекарь 2

Второй библиотекарь 2

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

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

Персонажи 2

клиент 2

Первый библиотекарь 2

Второй библиотекарь 2

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

Начальная таблица 2

Таблица для клиента 2

Таблица первого библиотекаря 2

Таблица второго библиотекаря 2

Работы программы 2

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

Приложение 2

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

Код классов, реализующих персонажей 2

Заключение 2

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






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

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

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

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

Объекты:

  • клиент, который хочет получить книгу;

  • первый библиотекарь, который ищет номер книги в БД

  • второй библиотекарь, который выдает книгу

Правила:

Клиент

Сначала должен узнать номер книги у первого библиотекаря. Если у первого библиотекаря нет места в очереди, то он уходит.

Если в очереди есть свободное место, то он встает в очередь и продвигается в ней пока не дойдет до первого библиотекаря.

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

Первый библиотекарь

Если клиентов нет, то он играет в карты на компьютере, если есть клиент у стойки, то он ищет номер книги, и в последствии сообщает его клиенту.

Второй библиотекарь

Если нет клиентов, то он стоит у стойки. Когда клиент сообщает ему номер книги, он идет к полкам, находит книгу, и приносит ее клиенту.

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







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

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

Персонажи

клиент

Клиент без книги

Клиент с книгой

Клиент спрашивает книгу

Клиент сообщает номер книги




Первый библиотекарь

Играет в карты

Недоволен, что отвлекли


Ищет книгу


Сообщает номер книги



Второй библиотекарь



Стоит

Отдает книгу



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

Начальная таблица

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


Таблица для клиента




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




Таблица первого библиотекаря


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


Таблица второго библиотекаря


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

Работы программы

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

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

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







Приложение

На компьютере должен быть установлен последний .NET 4 Framework

Ссылка для установки: http://www.microsoft.com/downloads/en/details.aspx?FamilyID=9cfb2d51-5ff4-4491-b0e5-b386f32c0992&displaylang=en

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

protected override void WndProc(ref Message m)

{

int wparamhi;

int wparamlo;

int wparam;

int lParam = Convert.ToInt32(m.LParam.ToString());


if (m.Msg == simprMsgId)

{

wparam = Convert.ToInt32(m.WParam.ToString());

wparamhi = wparam / 65536;

wparamlo = wparam - wparamhi * 65536;


switch (wparamhi)

{

case 0: // SIMPR sent condition number

m.Result = new IntPtr(0);

switch (wparamlo) //Switch by tables numbs

{

#region Table1Condition

case 1:

//switch by condition number (See condition desc in SIMPR)

switch (lParam)

{

case 1:

if (f.Clients.Count(p=>p.X>0)>0)

m.Result = new IntPtr(1);

else

m.Result = new IntPtr(0);

break;

case 2:

if (f.Clients.Count(p=>p.X<0)>=f.ClientsCount)

m.Result = new IntPtr(1);

else

m.Result = new IntPtr(0);

break;

case 3:

if (f.Clients.Count(p=>p.Processed)==0)

m.Result = new IntPtr(1);

else

m.Result = new IntPtr(0);

break;

default:

break;

}

break;

#endregion

#region Table2Conditions

case 2:

switch (lParam)

{

case 1:

if (f.Clients[f.ActiveClient].DontReachQueueA())

m.Result = new IntPtr(1);

else

m.Result = new IntPtr(0);

break;

case 2:

if (f.Clients[f.ActiveClient].NearTheBeginOfQueueA())

m.Result = new IntPtr(1);

else

m.Result = new IntPtr(0);

break;

case 3:

if (f.Clients[f.ActiveClient].ExistPlaceInQueueA())

m.Result = new IntPtr(1);

else

m.Result = new IntPtr(0);

break;

case 4:

if (f.Clients[f.ActiveClient].NearWomanA())

m.Result = new IntPtr(1);

else

m.Result = new IntPtr(0);

break;

case 5:

if (f.Clients[f.ActiveClient].RecieveAnswerFromWomanA())

m.Result = new IntPtr(1);

else

m.Result = new IntPtr(0);

break;

case 6:

if (f.Clients[f.ActiveClient].ExistPlaceInQueueB())

m.Result = new IntPtr(1);

else

m.Result = new IntPtr(0);

break;

case 7:

if (f.Clients[f.ActiveClient].NearWomanB())

m.Result = new IntPtr(1);

else

m.Result = new IntPtr(0);

break;

case 8:

if (f.Clients[f.ActiveClient].HaveABook())

m.Result = new IntPtr(1);

else

m.Result = new IntPtr(0);

break;

case 9:


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

Файл
95157.rtf
17192.rtf
1328.rtf
38181.doc
69744.rtf




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