ФГОУ СПО «Волгоградский технологический коледж»
«Проект защитил
с оценкой »
А.И. Сухинин
30.05.05
Моделирование работы карьера
Курсовой проект
КП 11. 230105. 51. 0249 ПЗ
Разработчик А.И. Сухинин
30.05.05
Рук.проекта А.А. Теткин
30.05.05
Содержание
1. Введение………………………………………………………………………3
2. Сущность понятия «имитационное моделирование»………………………4
3. Описание системы……………………………………………….……………63.1 Модельное время..………………………………………………….………..73.2Классы и объекты………………………………………………….………...73.3События и методы………………………………………………….………..94. Программная реализация алгоритма………………………………….……10
5. Анализ результатовработы программы……………………………....……24
6. Заключение……………………………………………………………..30
7. Список использованной литературы…………………………………….…31
ЕСЛИ НУЖНА ПРОГРАММА НА С++ ОБРАЩАЙТЕСЬ: saneek93@mail.ru
Оформление и правка возможна
1. Введение
В общем, моделирование можно считать универсальным методом описания физических, технических, организационных и других систем. До появления вычислительной техники в основном исследовались и применялись аналитические модели. Любой закон, описывающий поведение некоторой системы, связывающий характеризующие ее величины, должен рассматриваться как модель этой системы. Например, закон Ома, описывающий величины физических процессов в электрической цепи является моделью. Эта модель абстрагируется от частных характеристик конкретного процесса и определяется соотношение существующих его параметров. Таким образом, характеризующей чертой любой модели является абстрагирование. Указанная простейшая модель может быть отнесена к классу аналитических моделей, поскольку является аналитическим соотношением, допускающим непосредственное получение числовых результатов после постановки известных числовых параметров в соответствующее выражение. Такими же моделями независимо от уровня их сложности являются математические соотношения, описывающие связь параметров различных физических и технических систем. Например, система дифференциальных уравнений описывающие потоки жидкостей движения тел в различных средах, системы уравнений, описывающие связь электронных характеристик, сложных радиоэлектронных устройств, системы уравнений для расчетно-сложных механических конструкций и т.д.
Однако с усложнением системы в построении моделей, в которых мы нуждаемся, их точное аналитическое описание становится все более проблематичными. Кроме того, есть необходимость в изучении поведения системы в условиях изменяющихся случайным образом внешних воздействий. Эти два фактора усложнение и случайный характер воздействий приводит к необходимости создания другого класса моделей так называемых имитационных.
Целью данной курсовой работы является разработкаимитационной модели с замкнутой системы с раздельными очередями и приоритетами т.е моделирование работы карьера. Основой для разработки модели в данной курсовой работе является метод имитационного моделирования. Так же курсовая работа предполагает создание программы на языке C++, обеспечивающей ввод исходной информации, ее обработку, реализацию алгоритма имитации процесса и выдачу необходимой информации. 2. Сущность понятия «имитационное моделирование»
Имитационное моделирование – это разработка и выполнение на компьютере программной системы, отражающей структуру и функционирование (поведение) моделируемого объекта или явления во времени. Такую программную систему называют имитационной моделью этого объекта или явления. Объекты и сущности имитационной модели представляют объекты и сущности реального мира, а связи структурных единиц объекта моделирования отражаются в интерфейсных связях соответствующих объектов модели. Таким образом, имитационная модель – это упрощенное подобие реальной системы, либо существующей, либо той, которую предполагается создать в будущем. Имитационная модель обычно представляется компьютерной программой, выполнение программы можно считать имитацией поведения исходной системы во времени.
В русскоязычной литературе термин «моделирование» соответствует американскому «modeling» и имеет смысл создание модели и ее анализ, причем под термином «модель» понимается объект любой природы, упрощенно представляющий исследуемую систему. Слова «имитационное моделирование» и «вычислительный (компьютерный) эксперимент» соответствуют англоязычному термину «simulation». Эти термины подразумевают разработку модели именно как компьютерной программы и исполнение этой программы на компьютере.
Итак, имитационное моделирование – это деятельность по разработке программных моделей реальных или гипотетических систем, выполнение этих программ на компьютере и анализ результатов компьютерных экспериментов по исследованию повеления моделей. Имитационное моделирование имеет существенные преимущества перед аналитическим моделированием в тех случаях, когда: отношения между переменными в модели не линейны, и поэтому аналитические модели трудно или невозможно построить. модель содержит стохастические компоненты. для понимания поведения системы требуется визуализация динамики происходящих в ней процессов. модель содержит много параллельно функционирующих взаимодействующих компонентов.
Во многих случаях имитационное моделирование – это единственный способ получить представление о поведении сложной системы и провести ее анализ.
Имитационное моделирование реализуется посредством набора математических инструментальных средств, специальных компьютерных программ и приемов, позволяющих с помощью компьютера провести целенаправленное моделирование в режиме «имитации» структуры и функций сложного процесса и оптимизацию некоторых его параметров. Набор программных средств и приемов моделирования определяет специфику системы моделирования – специального программного обеспечения.
В отличие от других видов и способов математического моделирования с применением ЭВМ имитационное моделирование имеет свою специфику: запуск в компьютере взаимодействующих вычислительных процессов, которые являются по своим временным параметрам – с точностью до масштабов времени и пространства – аналогами исследуемых процессов.
Имитационное моделирование как особая информационная технология состоит из следующих основных этапов: Структурный анализ процессов. Проводится формализация структуры сложного реального процесса путем разложения его на подпроцессы, выполняющие определенные функции и имеющие взаимные функциональные связи согласно легенде, разработанной рабочей экспертной группой. Выявленные подпроцессы, в свою очередь, могут разделяться на другие функциональные подпроцессы. Структура общего моделируемого процесса может быть представлена в виде графа, имеющего иерархическую многослойную структуру, в результате появляется формализованное изображение имитационной модели в графическом виде. Структурный анализ особенно эффективен при моделировании экономических процессов, где (в отличие от технических) многие составляющие подпроцессы не имеют физической основы и протекают виртуально, поскольку оперируют с информацией, деньгами и логикой (законами) их обработки. Формализованное описание модели. Графическое изображение имитационной модели, функции, выполняемые каждым подпроцессов, условия взаимодействия всех подпроцессов и особенности поведения моделируемого процесса (временная, пространственная и финансовая динамика) должны быть описаны на специальном языке для последующей трансляций. Построение модели (build). Обычно это трансляция и редактирование связей (сборка модели), верификация (калибровка) параметров. Проведение экстремального эксперимента для оптимизации определенных параметров реального процесса.
3.Описание системы
В карьере самосвалы доставляют руду от трех экскаваторов к измельчителю. После выгрузки руды у измельчителя самосвал всегда возвращается к одному и тому же экскаватору, за которым он закреплен. Используются самосвалы грузоподъемностью 20 и 50 т. За каждым экскаватором закреплены два 20-тонных и один
50-тонный самосвал. Очередь к измельчителю — общая. От грузоподъемности
самосвала зависят времена его погрузки, движения до измельчителя, разгрузки и
возвращения к своему экскаватору. Для 20-тонных самосвалов задаются следую-
щие параметры: время погрузки распределено экспоненциально с математиче-
ским ожиданием 5 условных единиц времени, время поездки до измельчителя
постоянно и равно 2,5, время разгрузки распределено экспоненциально с мате-
матическим ожиданием 2, время возвращения к экскаватору постоянно и равно
1,5. Для 50-тонных самосвалов соответственно имеем:время погрузки распреде-
лено экспоненциально с математическим ожиданием 10, время поездки до из-
мельчителя постоянно и равно 3, время разгрузки распределено экспоненциаль-
но с математическим ожиданием 4, время возвращения постоянно и равно 2.
Очереди к каждому экскаватору организованы по принципу «первым пришел —
первым обслужен». В очереди к измельчителю приоритет имеют большегрузные
самосвалы. Схема работы карьера приведена на рис. 1.
/>
Рис. 1. Сxeмa работы карьера
Требуется проанализировать функционирование всей системы в течение 480 единиц времени для определения загрузки экскаваторов и измельчителя и длины
очередей к ним.3.1 Модельное время
В постановке задачи единица измерения времени не указана. Поэтому предположим, что все значения даны в минутах, и в качестве единицы модельного време-
ни примем секунду. Постоянные величины задаем сразу в секундах, а результаты ГСЧ экспоненциального распределения умножим на 60 и округлим до ближайшего целого числа. Разумеется, в качестве масштабирующего коэффициента можно выбрать и любое другое значение, которое экспериментатор считает подходящим.3.2Классы и объекты
Система, которую мы собрались моделировать, обладает особенностью, — она является замкнутой. Это означает, что какие-либо внешние входные и выходные потоки отсутствуют, количество объектов в системе постоянно и со временем не меняется. Поэтому в замкнутой системе отсутствует и понятие времени пребывания заявки в ней. В замкнутых системах всегда существует установившийся режим. Аналитическое моделирование замкнутых систем гораздо более трудоемко по сравнению с моделированием открытых, поэтому для их изучения имитационные модели особенно полезны. При отсутствии внешнего входного потока число заявок во всех очередях имеет фиксированную верхнюю границу, поэтому в данной задаче нет необходимости для моделирования очередей использовать списки. Очереди будем представлять с помощью массивов.
Совокупность экскаваторов можно назвать пунктом погрузки, измельчитель — пунктом разгрузки, самосвалы выполняют ту же самую работу, система является замкнутой, число заявок постоянно. Однако существуют и отличия, привносящие в задачу новые, пока что не встречавшиеся нам особенности. Перечислим их: в системе имеется многоканальный узел (экскаваторы) с раздельными очередями к каналам, каждая заявка приписана к определенному каналу и не может обслуживаться другим; в системе имеется узел (измельчитель), реализующий дисциплину обслуживания с приоритетом; заявки, находящиеся в системе, являются разнотипными (20 т и 50 т), каждый тип имеет собственные характеристики.
Приведем полные списки полей данных классов.
Класс HeavyCar
Неизменяемые поля: среднее время пути груженого самосвала; среднеквадратичное отклонение времени в пути груженого самосвала; среднее время в пути порожнего самосвала; среднеквадратичное отклонение времени в пути порожнего самосвала; порядковый номер; указатель на Пункт погрузки; указатель на Пункт розгрузки; Тип самосвала; Номер экскаватора.
Изменяемые поля: состояние самосвала; время, оставшееся до прибытия на разгрузку; время, оставшееся до прибытия на погрузку.
Класс Fuller
Неизменяемые поля: количество экскаваторов; производительность измельчителя; продолжительность отдыха после погрузки; массив производительностей экскаваторов.
Изменяемые поля: массив значений времени, оставшегося до окончания погрузки каждым экскаватором; массив указателей на объекты класса HeavyCar, обслуживаемые в данный момент эксковаторами; массив указателей на объекты класса HeavyCar, находящиеся в очереди на погрузку; массив значений времени, оставшегося до окончания «отдыха» эксковаторов; массив признаков того, готова ли для эксковатора куча земли.
Класс Emptier
Неизменяемые поля: количество разгрузчиков; минимальное время разгрузки; максимальное время разгрузки.
Изменяемые поля: массив значений времени, оставшегося до окончания разгрузки каждым разгрузчиком; массив указателей на объекты класса HeavyCar, обслуживаемые в данный мо-мент разгрузчиками; массив указателей на объекты класса HeavyCar, находящиеся в очереди на разгрузку. 3.3События и методы
Класс HeavyCar не имеет моделирующих методов, за исключением метола run( ), так как все события, происходящие с самосвалом, моделируются методами других классов. С пунктом погрузки могут происходить следующие события: окончание работы измельчителя прибытие в пункт очередного самосвала; окончание загрузки самосвала одним из эксковаторов; окончание «отдыха» одного из эксковаторов.
Для каждого из этих событий нужно написать метод-обработчик. По смыслу выполняемых действий первый метод параметров не имеет, второй получает указа-
тель на объект класса HeavyCar, третий и четвертый методы получают целочис-
ленный порядковый номер эксковатора заершившего погрузку или отдых.
Возможные события для пункта разгрузки — прибытие очередного самосвала
и окончание разгрузки самосвала одним из эксковаторов.
В класс Emptier добавляется служебный метод choice( ), реализующий дисциплину обслуживания с приоритетом. Этот метод вызывается из метода Complete( )в момент завершения обслуживания заявки и выбирает номер по порядку в очереди для той заявки, которую следует выбрать для обслуживания в соответствии с заданным приоритетом. Сдвиг очереди при этом, разумеется, происходит не от первой заявки, а от той, которая была выбрана.
Нужно также определить смысл понятия «производительность» для данной си-
стемы. Делать это будем так: при окончании разгрузки 50-тонного самосвала увеличивать счетчик на единицу, а при окончании разгрузки 20-тонного самосвала — на 0,4. Таким образом, производительность будем измерять общим количеством разгруженных 50-тонных самосвалов (которое в итоге может оказаться дробным). Для подсчета массы руды в тоннах это значение достаточно будет умножить на 50.
Условие завершения всех начатых работ, чтобы не усложнять программу, учтем только при вычислении основной характеристики — количества разгруженных
самосвалов. Это сделано следующим образом. В момент завершения рабочего
дня, то есть истечения восьмичасового интервала времени, проверяется состоя-
ние каждого самосвала. Если самосвал находится в очереди на погрузку или дви-
жется порожняком, он оставляется без внимания. При любом другом состоянии
он должен «дойти» до разгрузки, поэтому к числу разгруженных самосвалов
прибавляется единица.4.Программная реализация алгоритма
При создания имитационной модели очереди с разнотипными заявками (работа порта) был выбран язык программирования C++ и написана программа на этом языке, позволяющая в полной мере отразить функционирование системы.
Листинг программы файл 8.h. Описание классов
#include
#include
#include
#include
using namespace std;
#include «random.h»
FILE *qu1;
FILE *qu2;
int completed=0;
float weight=0; //счетчик перевезенной массы руды
float *que1_ave=NULL; //средние длины очередей к экскаваторам
float que2_ave=0; //средняя длина очереди к измельчителю
long int total;
int *ro_fuller=NULL; // коэффициенты загрузки экскаваторов
float ro_emptier=0;
long int path_full=0L;
long int path_empty=0L;
long int take=0L;
long int give=0L;
class HeavyCar
{
int direct; //время в пути от экскаватора к измельчителю
int back; //время в пути от измельчителя к экскаватору
int id;
int pr; //1 — для 20-тонного, 2 — для 50-тонного самосвала
int host; // номер экскаватора, к которому приписан самосвал
int state;
int to_pfull;
int to_pempty;
void *f;
void *e;
public:
friend class Fuller;
friend class Emptier;
HeavyCar(int a, int b, int c); //метод-конструктор
void putFuller(Fuller *f1);
void putEmptier(Emptier *e1);
void run();
void Print();
int State() { return(state); }
};
class Fuller
{
const static int perf20=2; //интенсивность загрузки20-тонных
//самосвалов
const static int perf50=1; //интенсивность загрузки 50-тонных
//самосвалов
int *to_full;
HeavyCar **serving;
HeavyCar **queue;
public:
//Следующие поля данных объявлены открытыми, так как их значения //потребуются конструктору класса Emptier для подсчета общего количества //самосвалов в системе
const static int volume=3; //количество экскаваторов
const static int N20=2; //количество 20-тонных самосвалов
//у одного экскаватора
const static int N50=1; //количество 50-тонных самосвалов
//у одного экскаватора
Fuller();
~Fuller();
void PutCars(HeavyCar **h); //метод для начального заполнения пункта
//загрузки самосвалами
void Complete(int i);
void Arrival(HeavyCar *h);
void Print();
int qLength(int i);
int State(int i);
void run();
};
class Emptier
{
const static int volume=1; //количество измельчителей
const static int perf20=5; //интенсивность разгрузки 20-тонных
//самосвалов
const static int perf50=25; //интенсивность разгрузки 50-тонных
//самосвалов
const static int order=2; // правило выбора заявок из очереди
int *to_empty;
HeavyCar **serving;
HeavyCar **queue;
int S; //общее количество самосвалов —
//максимальная длина очереди
public: