Ответ на статью в «Байкал-Дэйли» и на сюжет «Ариг Уса»;pdf

Инноватика. Научный электронный журнал. 2014 № 2
Свидетельство о регистрации ЭЛ № ФС 77-5722
Соколова Анастасия Сергеевна,
ОАО "СОГАЗ" Архангельский филиал, ведущий специалист
[email protected]
Зеленина Лариса Ивановна,
кандидат технических наук, доцент кафедры Прикладной математики и
высокопроизводительных вычислений Института математики, информационных и
космических технологий Северного (Арктического) федерального университета им.
М.В.Ломоносова, г. Архангельск
[email protected]
ИМИТАЦИОННОЕ МОДЕЛИРОВАНИЕ КАК КОНСТРУКТИВНЫЙ
МЕТОД ПРИНЯТИЯ УПРАВЛЕНЧЕСКИХ РЕШЕНИЙ
Аннотация.
В статье рассмотрен процесс имитационного моделирования на примере
деятельности конкретного предприятия.
Ключевые слова: имитационное
программное обеспечение.
моделирование,
управленческое
решение,
Введение
Жизнь каждого человека постоянно связана с принятием решений. Независимо от
того на каком уровне принимается решение (обыденно повседневном или
управленческом) оно может быть усложнено, если человек не располагает всей
необходимой информацией. Вместе с тем организационная структура общества
постоянно усложняется. Эта сложность объясняется характером взаимоотношений
между различными элементами организаций и физическими системами,
взаимодействующими с ними.
Данная проблема может быть решена с помощью имитационного моделирования,
которое применимо даже тогда, когда проводить эксперименты на реальных объектах
нецелесообразно или невозможно[1].
При имитационном моделировании динамические процессы системы оригинала
подменяются процессами, имитируемыми в абстрактной модели, но с соблюдением
основных правил (режимов, алгоритмов) функционирования оригинала. В процессе
имитации фиксируются определенные события и состояния или измеряются выходные
воздействия, по которым вычисляются характеристики качества функционирования
системы[2].
Компьютерная же реализация модели показывает в модельном времени динамику
функционирования моделируемой системы.
Имитационная модель
Рассмотрим процесс составления имитационной модели на примере работы
склада. На первом этапе моделирования были проанализированы основные
характеристики деятельности и определена их длительность. Были изучены: проверка
наличия свободных разгрузочных постов, проезд на разгрузочный пост с дороги,
Инноватика. Научный электронный журнал. 2014 № 2
Свидетельство о регистрации ЭЛ № ФС 77-5722
ожидание на дороге, прием документов, проверка сохранности пломбы и соответствия
груза документации, принятие решения о дальнейших действиях, выезд фуры
с территории склада, разгрузка товара, оформление документов по приему товара,
разгрузка товара. Кроме того, на каждом шаге процесса были определены необходимые
ресурсы (специалисты) и их количество, которое было соотнесено с количеством
работающих на складе по каждой специальности и временным промежутком их
работы.
Для имитации работы склада была разработана, производящая приближенное, до
некоторой степени точности, моделирование работы реального склада. Для написания
данного программного продукта использовалось свободное программное обеспечение
с открытым исходным кодом: кросплатформенный фрэймворк Qt, а также свободная
библиотека для построения графиков qwt.
Фрэймворк QT — кросс-платформенный инструментарий разработки ПО на
языке программирования C++. Позволяет запускать написанное с его помощью ПО в
большинстве современных операционных систем путём простой компиляции
программы для каждой ОС без изменения исходного кода. Включает в себя все
основные классы, которые могут потребоваться при разработке прикладного
программного обеспечения, начиная от элементов графического интерфейса и
заканчивая классами для работы с сетью, базами данных и XML. Qt является
полностью объектно-ориентированным, легко расширяемым и поддерживающим
технику компонентного программирования.
Qwt - набор Qt-виджетов и вспомогательных классов, необходимых для создания
графического представления числовых данных. Помимо виджета для двумерного
отображения данных (QwtPlot) он включает в себя классы для отображения данных в
разных масштабах осей, различные стили отображения кривых и маркеров на виджете
QwtPlot, а также некоторые другие вспомогательные виджеты.
Ниже представлен фрагмент кода программы:
Algo.h
#ifndef ALGO_H
#define ALGO_H
#include <QtCore/QCoreApplication>
#include <QQueue>
#include <QVector>
#include <cmath>
#include <ctime>
typedef struct
{
uint minutes;
uint * post;
uint in_queue;
uint catered;
}Time;
typedef struct{
uint time_waiting;
uint processing_time;
uint arrived_time;
} Machine;
typedef struct {
QVector<Time> OneDayTime;
QQueue<Machine> MachInStrat;
QQueue<Machine> MachInEnd;
}AllParamsDay;
Инноватика. Научный электронный журнал. 2014 № 2
Свидетельство о регистрации ЭЛ № ФС 77-5722
AllParamsDay OneDay(uint PostsNum);
inline uint get_time(uint low, uint high, uint flag = 0, uint ma = 0, uint
dg = 0);
#endif // ALGO_H
Mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QtGui/QMainWindow>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QSpinBox>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QPen>
#include "Algo.h"
#include <C:\Qt\qwt-6.0.2\include\qwt_plot.h>
#include <C:\Qt\qwt-6.0.2\include\qwt_plot_curve.h>
#include <C:\Qt\qwt-6.0.2\include\qwt_plot_grid.h>
#include <C:\Qt\qwt-6.0.2\include\qwt_symbol.h>
#include <C:\Qt\qwt-6.0.2\include\qwt_scale_draw.h>
#include <C:\Qt\qwt-6.0.2\include\qwt_scale_widget.h>
#include <C:\Qt\qwt-6.0.2\include\qwt_plot_canvas.h>
class MyWidget : public QWidget
{
Q_OBJECT
public:
MyWidget(QWidget *parent = 0);
~MyWidget();
private:
QHBoxLayout * MainHBox;
QVBoxLayout * LeftVBox;
QVBoxLayout * RightVBox;
QSpinBox * PostCountBox;
QLabel * Labels[4];
QLineEdit * LineEditField[3];
QVBoxLayout * VBoxArray[2];
QHBoxLayout * SettingsHBox;
QPushButton * StartBut;
QVector< AllParamsDay > Period;
float AvgTimeWaiting;
float AVGCatered;
float AVGInQueue;
QwtPlot *plotter;
QwtPlotCurve *curve;
QwtPlotGrid *grid;
QwtSymbol *symbol;
QVector<double> * axeX;
QVector<double> * axeY;
void DrawGraph();
private slots:
void DoButtonWork();
};
#endif // MAINWINDOW_H
Algo.cpp
#include "Algo.h"
inline uint get_time(uint low, uint high, uint flag, uint ma, uint dg)
{
uint tim = 0;
Инноватика. Научный электронный журнал. 2014 № 2
Свидетельство о регистрации ЭЛ № ФС 77-5722
switch(flag)
{
case 1:
{
break;
}
case 2:
{
break;
}
default:
{
tim = std::rand() % ( high - low) + low;
}
}
return tim;
}
AllParamsDay OneDay(uint PostsNum)
{
QQueue<Machine> Machines_in_start;
QQueue<Machine> Machines_in_endstart;
QVector<Time> Maintime;
AllParamsDay Values;
Time current_time;
uint num_post = PostsNum;
uint GO_machine = 0;
uint Stop_car_time = 390;
current_time.post = new uint[num_post];
current_time.in_queue = 0;
current_time.catered = 0;
for(uint i = 0; i < num_post; ++ i)
current_time.post[i] = 0;
for(uint i = 0; i < 450; ++i)
{
current_time.minutes = i;
for(uint p = 0; p < num_post; ++p)
{
if(current_time.post[p] ) current_time.post[p] -= 1;
//qDebug("Curr post time %d", current_time.post[p]);
}
if( (GO_machine == 0) && (i < Stop_car_time))
{
Machine car;
car.processing_time = get_time(5, 20)
+ get_time(10, 20)
+ get_time(1, 60)
+ get_time(20, 60, 0, 40, 10)
+ get_time(10, 40, 0, 15, 5)
+ get_time(30, 120, 0, 60, 15);
car.time_waiting = 0;
car.arrived_time = i;
Machines_in_start.enqueue(car);
current_time.in_queue += 1;
GO_machine = get_time(5, 60);
//
//qDebug("Time car %d",
Machines_in_start.head().processing_time);
}
if(!Machines_in_start.isEmpty())
{
for(uint i = 0; i < num_post; ++i)
{
Инноватика. Научный электронный журнал. 2014 № 2
Свидетельство о регистрации ЭЛ № ФС 77-5722
if(current_time.post[i] == 0)
{
//
current_time.catered += 1;
if(current_time.in_queue)current_time.in_queue -= 1;
current_time.post[i] =
Machines_in_start.first().processing_time;
Machines_in_endstart.enqueue(Machines_in_start.first());
Machines_in_start.dequeue();
//
//qDebug("Post[%d] time = %d", i,current_time.post[i] );
goto further;
}
}
if(!Machines_in_start.isEmpty())
{
for(int j = 0; j < Machines_in_start.size(); ++j)
Machines_in_start[j].time_waiting += 1;
}
}
further:
current_time.catered = Machines_in_endstart.count();
//qDebug("Minute %d, in_qeues %d, catered %d ",
current_time.minutes, current_time.in_queue, current_time.catered);
if(GO_machine)GO_machine -= 1;
Maintime.append(current_time);
}
Values.OneDayTime = Maintime;
Values.MachInStrat = Machines_in_start;
Values.MachInEnd = Machines_in_endstart;
return Values;
}
};…
В результате получаем следующие формы:
Рисунок 1 – Главная форма программы
Начальными условиями задано количество постов, равное, предположим, двум.
Программа имитирует работу склада в течение одной рабочей смены и собирает
статистику за 100 рабочих смен.
Инноватика. Научный электронный журнал. 2014 № 2
Свидетельство о регистрации ЭЛ № ФС 77-5722
Машины должны приходить по графику, допустим, каждые пол часа в период
работы склада, значит, максимальное количество принимаемых за рабочий день машин
может быть определено (например, 13). Тогда можно оценить, сколько было обслужено
машин за день, среднее время ожидания машины свободного поста и среднее время
простоя поста.
Оценим статистику при текущих условиях:
Рисунок 2 – Статистика работы разгрузочного поста при начальных условиях
При заданном количестве постов среднее число машин, разгруженных в день
оказалось меньше максимально возможного (5 из 13). То есть, даже при текущем
потоке машин разгрузочные посты не справляются. По результатам статистики среднее
время ожидания машины свободного поста 113 минут, т.е. почти 2 часа. Таким
образом, надо увеличить количество постов (например, до 4):
Инноватика. Научный электронный журнал. 2014 № 2
Свидетельство о регистрации ЭЛ № ФС 77-5722
Рисунок 3 – Статистика работы постов при измененных условиях.
С увеличением количества постов до четырех, количество разгруженных машин
может увеличиться до 10. Время ожидания каждой машины уменьшится, хоть и
незначительно (в среднем на 20 минут). Еще раз увеличим количество постов до 6.
Рисунок 4 – Статистика работы постов при измененных условиях.
При увеличении количества постов до 6, мы наблюдаем, что количество
разгруженных машин увеличилось до 12. То есть практически все машины
разгружаются в течении дня. Время ожидания свободного поста, в среднем – 7.8 минут.
Инноватика. Научный электронный журнал. 2014 № 2
Свидетельство о регистрации ЭЛ № ФС 77-5722
Можно сделать вывод, что увеличение потока при данных условиях пока
невозможно, потому что даже с текущим потоком фур на разгрузку товара посты не
справляются. Необходимо увеличить количество постов как минимум до 6 или
уменьшить поток. Так же необходимо более рационально распределить график
прибытия машин.
Исходя из условий задачи, а также результатов работы модели, мы получаем, что
больше всего времени уходит на работу с машиной на посту. Увеличивая количество
постов, мы, фактически увеличиваем количество людей, обслуживающих машины.
Отсюда можно сделать вывод, что вполне возможно при определенных условиях
ускорить работу каждого поста в отдельности, а именно по средствам
перераспределения времени между рабочими, либо увеличения людских ресурсов на
одном посту.
Заключение
Таким образом, так называемым, “узким горлышком” процесса является время
обработки одного автомобиля на складе. Данная работа тесно связана с людскими и
финансовыми ресурсами. Для точного, и наиболее полного ответа на вопрос
оптимизации, может дать только новая модель с большим количеством параметров, и
ориентированной на обработку машины и груза непосредственно на посту (например,
моделирование работы грузчиков, механизаторов и т.п.). Но добавление в программу
вышеперечисленного функционала сделало бы ее слишком громоздкой и трудной для
понимания для непосвященного пользователя, в связи с чем данный функционал было
решено не включать. В то же время в качестве упрощенной и ознакомительной модели
всего цикла обработки машины на складе (в том числе очередь автомобилей на
подъезде), данная программа подходит наилучшим образом.
Ссылки на источники
1. Терелянский, П. В. Системы поддержки принятия решений. Опыт
проектирования: монография / П. В. Терелянский ; ВолгГТУ. — Волгоград,
2009. — 127 с.
2. Имитационное моделирование. Интернет-университет информационных
технологий
[Электронный
ресурс].
URL:
http://www.intuit.ru/department/calculate/intromathmodel/5/.(дата
обращения:
02.09.2014).
3. Имитационное моделирование экономических систем [Электронный ресурс].
URL: http://www.ibl.ru/konf/140509/34.html. (дата обращения: 05.09.2014).
Инноватика. Научный электронный журнал. 2014 № 2
Свидетельство о регистрации ЭЛ № ФС 77-5722
Sokolova Anastasia Sergeevna,
OJSC "SOGAZ" Arkhangelsk branch, leading specialist
[email protected]
Zelenina Larisa Ivanovna,
Candidate of Technical Sciences, Associate Professor, Department of Applied Mathematics
and High Performance Computing of Institute of Mathematics, Information and Space
Technologies, Northern (Arctic) Federal University named after M.V. Lomonosov,
Arkhangelsk
[email protected]
IMITATING MODELING AS A CONSTRUCTIVE METHOD OF MAKING
MANAGEMENT DECISIONS
Abstract.
In the article reviewed the process imitating modeling on the example of a particular
company.
Keywords: imitating modeling, management decision, software.