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

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

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

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











ОТЧЕТ

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

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

«Подсобный рабочий в магазине IKEA»











Выполнила: Дудкина А.

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

Предмет: Теория игр и Исследование операций

Проверили: Гречкина П.В., Еремеев А.П.





2011 г.

Оглавление

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

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

  3. Описание таблиц … 3

Таблица 1: Прием товара … 3

Таблица 2: Разборка товара … 5

Таблица 3: Обратно к разгрузочному пункту … 7

  1. Описание интерфейса и скриншоты … 8

  2. Заключение … 15

  3. Литература … 15

  4. Приложение (выдержки из программного кода) … 15











































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

С помощью СИМПР разработать модель сортировки товара на складе в магазине IKEA. Правила распределения товаров по отделам описываются в таблицах СИМПРа (не менее 3 таблиц). Работа модели заканчивается, когда заканчиваются товары, которые необходимо разложить.



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

Склад представляет из себя пространство, по которому может перемещаться вверх, вниз, вправо и влево работник, раскладывающий товары. Поступающие товары ренерируются рандомно, они могут быть четырех типов: товары из отдела «Текстиль», товары из отдела «Посуда», битый товар и батарейки без упаковки. Текстиль должен быть отложен в одну из трех пустых тележек в левой части поля. Посуда аналогично складывается в тележки, стоящие справа. В одну тележку может поместиться три товара, когда тележка заполняется, работник переходит к следующей. Битый товар относится в свалку мусора в верхней части поля. Свалка может вместить неограниченное количество мусора (в реальной жизни ее очищают по заполнении другие работники). Батарейки без упаковки не совсем добросовестный работник прячет в карман, чтобы после смены унести домой. Когда товары (сгенерированные заранее) заканчиваются, работник может уйти на обед.



Описание таблиц

Разработано 3 таблицы. Общее число условий: 19, число действий: 23, число правил: 29.

Первая таблица описывает то, как работник берет товар, и определяет, к свалке какого отдела ему нужно оправиться. Здесь же находится условие останова: если товаров, которые нужно разобрать, больше нет, то Окончание. Таблица содержит 7 условий, 6 действий и 13 правил, включая правило Иначе.































Во второй таблице описывается движение работника к нужному месту и то, как он кладет товар в тележку. При этом если для товаров из отдела «Текстиль» или «Посуда» нет места в i-той тележке, он переходит к (i+1)-ой. Таблица содержит 7 условий, 10 действий и 10 правил, включая правило Иначе.























Третья таблица описывает движение работника обратно к разгрузочному пункту, возвращение к исходной позиции. Содежит 5 условий, 7 действий и 9 правил, включая правило Иначе.







Описание интерфейса

Интерфейс и интерпретация команд от СИМПРа написаны на языке C#. Ниже представлена реализация взаимодействия с СИМПРом (с комментариями).

public class MyHookClass : NativeWindow

{

[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]

static extern uint RegisterWindowMessage(string lpString);


uint simpr;

Form1 f;


public MyHookClass(Form1 af)

{

simpr = RegisterWindowMessage("MyMessage");

this.AssignHandle(af.Handle);

f = af;

}


protected override void WndProc(ref Message m)

{

int wparamhi, wparamlo, wparam;

int lParam = Convert.ToInt32("" + m.LParam);


if (m.Msg == simpr)

{

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

wparamhi = wparam / 65536;

wparamlo = wparam - wparamhi * 65536;


#region Условия

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

{

if (wparamlo == 1) // Номер таблицы

{ // Прием товара (Таблица 1)

switch (lParam) // Номер Условия

{

case 1: m.Result = f.Box(); break; // Есть неразобранный товар?

case 2: m.Result = f.NearHeap(); break; // Работник у разгрузочного пункта?

case 3: m.Result = f.InHands(); break; // Работник взял товар?

case 4: m.Result = f.TextileInHands(); break; // Взят товар из отдела "Текстиль"?

case 5: m.Result = f.TablewareInHands(); break; // Взят товар из отдела "Посуда"?

case 6: m.Result = f.BrokenInHands(); break; // Взят битый товар?

case 7: m.Result = f.BatteryInHands(); break; // Взяты батарейки без упаковки?

default: m.Result = new IntPtr(1); break;

}

f.listBox1.Items.Add("Таблица 1 Условие " + lParam.ToString() + ". Результат: " + m.Result.ToString());

}

else if (wparamlo == 2)// Разборка товара (Таблица 2)

{

switch (lParam)

{

case 1: m.Result = f.ToTextile(); break; // Идем к свалке Текстиля?

case 2: m.Result = f.ToTableware(); break; // Идем к свалке Посуды?

case 3: m.Result = f.Center(); break; // Идем к свалке битого товара?

case 4: m.Result = f.TextileCart(); break; // Есть пустая тележка для Текстиля?

case 5: m.Result = f.TablewareCart(); break; // Есть пустая тележка для Посуды?

case 6: m.Result = f.IsDump(); break; // Дошли до свалки битого?

case 7: m.Result = f.InHands(); break; // Товар в руках?

default: m.Result = new IntPtr(1); break;

}

f.listBox1.Items.Add("Таблица 2 Условие " + lParam.ToString() + ". Результат: " + m.Result.ToString());

}

else


if (wparamlo == 3) // Обратно к разгрузочному пункту (Таблица 3)

{

switch (lParam)

{

case 1: m.Result = f.BackFromTextile(); break; // Идем от свалки Текстиля?

case 2: m.Result = f.BackFromTableware(); break; // Идем от свалки Посуды?

case 3: m.Result = f.BackFromDump(); break; // Идем от свалки битого?

case 4: m.Result = f.Step(); break; // Продолжаем топать вперед?

case 5: m.Result = f.PrevStep(); break; // Предыдущим шагом положили товар?

default: m.Result = new IntPtr(1); break;

}

f.listBox1.Items.Add("Таблица 3 Условие " + lParam.ToString() + ". Результат: " + m.Result.ToString());

}

// MessageBox.Show(m.Result.ToString());

}

#endregion

#region Действия

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

{

if (wparamlo == 1)

{

switch (lParam) // Прием товара (Таблица 1)

{

case 1: f.Get(); break; // Взять товар

case 2: f.GoTextile(); break; // Шагнуть к свалке Текстиля

case 3: f.GoTableware(); break; // Шагнуть к свалке Посуды

case 4: f.BeginGoCenter(); break; // Сделать шаг по центру к битому

case 5: f.Steal(); break; // Положить в карман батарейку

case 6: MessageBox.Show("Обед!"); break; // Окончание - идем на обед

}

f.listBox1.Items.Add("Таблица 1 Действие " + lParam.ToString() + ". Результат: " + m.Result.ToString());

}

else if (wparamlo == 2)

{

switch (lParam) // Разборка товара (Таблица 2)

{

case 1: f.PutIntoTextile(); break; // Положить товар в свалку Текстиля

case 2: f.PutIntoTableware(); break; // Положить товар в свалку Посуды

case 3: f.PutIntoDump(); break; // Положить товар в свалку битого

case 4: f.TurnRightTextile(); break; // Повернуться направо у Текстиля

case 5: f.TurnRightTableware(); break; // Повернуться направо у Посуды






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