скачать рефераты
  RSS    

Меню

Быстрый поиск

скачать рефераты

скачать рефератыКурсовая работа: Разработка модели теории массового обслуживания

        Port p;

        /* Задание начального времени */

        this.setLastTime(0);

        /* Задание начального состояния */

        this.setPresentState(findState("free"));

        /* Далее генерируем начальное системное сообщение */

        MessagePDEVS init_m = new MessagePDEVS("", Double.POSITIVE_INFINITY, this.getLastTime());

        /* Далее передаем системное сообщение сообщение в очередь сообщений

         * мультикомпонента, непосредственно содержащего данный компонент: */

        /* 1. Назначение порта */

        p = resolveOutPort("system");

        /* 2. Назначение сообщения */

        p.setMessage(init_m);

        /* 3. Собственно передача сообщения */

        this.getParentMULC().getProcessor().PassMessage(this.getName(), p.getName());

    }

   

    /** Функция продвижения времени */

    protected double ta() {

         return Double.POSITIVE_INFINITY;

    }

   

    /** Внутренняя функция транзакции */

    protected State delta_int() {

         return this.getPresentState();

    }

   

    /** Внешняя функция транзакции */

    protected State delta_ext() {

        State newState = null;

        /* Если сообщение пришло от сервера, то оно означает, что сервер готов обслуживать

         * следующее сообщение (требование). В таком случае, если в очереди есть сообщения

         * (требования), переходим в очереди новое состояние: уменьшаем количество сообщений

         *  (требований), ожидающих в обслуживания очереди на 1. */

        if (this.getCurrentPort().getName().equals("fromNext")) {

        serverIsFree = true;

        /* Если в очереди было одно сообщение (требование), то теперь там не будет ни одного */

        if (this.getPresentState().getName().equals("full")) {

                   newState = this.getPresentState();

                   if(numOfMessages==1)

                            newState = findState("free");

        }

        else

                   /* Если в очереди было два сообщения (требования), то теперь там будет одно */

                   if (this.getPresentState().getName().equals("free")) {

                            newState = this.getPresentState();

                   }

        }

        else

        /* Если сообщение (требование) пришло от клиента, то если очередь не заполнена,

         * "вставляем" это сообщение (требование) в очередь, переходя в новое состояние */

        if (this.getCurrentPort().getName().equals("fromMessageGenerator")){

                   num++;

                   if(!serverIsFree){

                   /* Если в очереди было пять сообщений (требований), то их там и останется пять */

                   if (this.getPresentState().getName().equals("full")){

                            numOfMessages++;

                            newState=this.getPresentState();

                   }

                   else

                            /* Если в очереди не было сообщений (требований), то теперь там будет одно */

                       if (this.getPresentState().getName().equals("free")) {

                            numOfMessages++;

                        newState=findState("full");

                       }

                   }

                   else

                            if(serverIsFree){

                                      /*проверить ещё надо*/

                                      newState=findState("free");

                            /*       serverIsFree=false;*/

                                      /*serverIsFree=false;*/

                            }

        }

        else

                   if(this.getCurrentPort().getName().equals("Vozvrat")){

                            num++;

                            if(!serverIsFree){

                            /* Если в очереди было пять сообщений (требований), то их там и останется пять */

                            if (this.getPresentState().getName().equals("full")){

                                      numOfMessages++;

                                      newState=this.getPresentState();

                            }

                            else

                                      /* Если в очереди не было сообщений (требований), то теперь там будет одно */

                                if (this.getPresentState().getName().equals("free")) {

                                     numOfMessages++;

                            newState=findState("full");

                                }

                            }

                            else

                                      if(serverIsFree){

                                               /*проверить ещё надо*/

                                               newState=findState("free");

       

                                      }

                   }

       

                   else newState = this.getPresentState();

       

        return newState;

    }

   

    /** Выходная функция (создания списка выходных событий) */

    protected LinkedList lambda() {

        LinkedList list = new LinkedList();

        MessagePort mp1 = new MessagePort();

        MessagePDEVS msg1 = new MessagePDEVS();

       /* System.out.println("Очередь 1");*/

        /* Реакция на сообщения от клиента */

        if (this.getCurrentPort().getType().equals("fromMessageGenerator")) {

        /* Если сообщение от клиента приходит в тот момент, когда очередь была пуста, а сервер

         * свободен, тогда формируется и отправляется на обработку сообщение серверу */

        if ((this.getPresentState().getName().equals("free")))

                            {

                   if(serverIsFree) {

                   /* Занимаем сервер */

                   serverIsFree = false;

                   skvoz++;

                   /* Установка метки времени */

                   msg1.setTimeStamp(this.getCurrentPort().getMessage().getTimeStamp());

                   /* Назначение выходного порта */

                   mp1.setPort("toNext");

                   /* Текст для отладки и трассировки */

                   msg1.setData("from Queue to Server");

                   /* Назначение сообщения на выходной порт */

                   mp1.setMessage(msg1);

                   /* Добавление в список выходных событий */

                list.add(mp1);

                return list;

               

        }

        }

        }

        else

                   /* Реакция на сообщение от сервера. Очередь реагирует на сообщения от сервера о том,

                    * что сервер свободен, только тогда, когда очередь не пуста */

                   if(this.getCurrentPort().getType().equals("fromNext")) {

       

                            if(this.getPresentState().getName().equals("full") || (numOfMessages==1)){

                                      /* Занимаем сервер */

                                      serverIsFree = false;

                                      /* Установка метки времени */

                                     msg1.setTimeStamp(this.getCurrentPort().getMessage().getTimeStamp());

                                      /* Назначение выходного порта */

                                      mp1.setPort("toNext");

                                      /* Текст для отладки и трассировки */

                                      msg1.setData("from Queue to Server");

                                      /* Назначение сообщения на выходной порт */

                                    mp1.setMessage(msg1);

                                      /* Добавление в список выходных событий */

                                      list.add(mp1);

                                      numOfMessages--;

                                      return list;

                            }

        }

        else

                   if(this.getCurrentPort().getType().equals("Vozvrat")) {

                            vozvrat++;

                   /* Если сообщение от клиента приходит в тот момент, когда очередь была пуста, а сервер

                    * свободен, тогда формируется и отправляется на обработку сообщение серверу */

                   if ((this.getPresentState().getName().equals("free")) && (serverIsFree)) {

                            /* Занимаем сервер */

                            serverIsFree = false;

                            skvoz++;

                            /* Установка метки времени */

                            msg1.setTimeStamp(this.getCurrentPort().getMessage().getTimeStamp());

                            /* Назначение выходного порта */

                            mp1.setPort("toNext");

                            /* Текст для отладки и трассировки */

                            msg1.setData("from Queue to Server");

                            /* Назначение сообщения на выходной порт */

                            mp1.setMessage(msg1);

                            /* Добавление в список выходных событий */

                        list.add(mp1);

                        return list;

                   }

                   }

        if(max<numOfMessages)

                   max=numOfMessages;

        return list;

    }

   

    /** Конфликтная функция транзакции (пуста) */

    protected String confluent() {

         return "external";

    }

}

3.Server1.java.

package DEJaView.modelLibs.a;

import DEJaView.core.*;

import java.util.*;

import java.util.Random;

/** Класс, реализующий работу сервера, обрабатывающего сообщения (требования) */

public class Server1 extends AtomicPDEVS {

        

         /** Параметр распределения, интенсивность потока */

         private final static double sigma = 1.0;

        

        

         private final static double P = 0.95;

        

         private double V;

        

         public int vozvrat;

         /** Вспомогательная переменная */

         private double ta;

         Random ra = new Random();

        

         /** Создает объект Server с заданным именем

          * @param name имя создаваемого объекта ксласса Server */

    protected Server1(String name) {

        super(name);

        /* Объекты класса Server могут находиться в одном из двух состояний, в зависимости

         * от того, занят сервер обработкой сообщения (требования) или нет */

        addState("busy");

        addState("free");

    }

   

    /** Инициализация компонента */

    protected  void init() {

         /* Описание системного порта */

        Port p;

        /* Задание начального времени */

        this.setLastTime(0);

        /* Задание начального состояния */

        this.setPresentState(findState("free"));

        /* Далее генерируем начальное системное сообщение */

        MessagePDEVS init_m = new MessagePDEVS("", Double.POSITIVE_INFINITY, this.getLastTime());

        /* Далее передаем системное сообщение сообщение в очередь сообщений

         * мультикомпонента, непосредственно содержащего данный компонент: */

        /* 1. Назначение порта */

        p = resolveOutPort("system");

        /* 2. Назначение сообщения */

        p.setMessage(init_m);

        /* 3. Собственно передача сообщения */

        this.getParentMULC().getProcessor().PassMessage(this.getName(), p.getName());

    }

    protected double ta() {

        if (this.getPresentState().getName().equals("busy")) {

        ta = Generator.genExp(sigma);

        return ta;

        }

        else

        return Double.POSITIVE_INFINITY;

    }

   

    protected State delta_int() {

         return this.getPresentState();

    }

   

    protected State delta_ext() {

        State newState = findState("busy");

        return newState;

    }

   

    protected LinkedList lambda() {

        LinkedList list = new LinkedList();

        MessagePort mp1 = new MessagePort();

        MessagePort mp2 = new MessagePort();

        MessagePDEVS msg1 = new MessagePDEVS();

        MessagePDEVS msg2 = new MessagePDEVS();

      /*  System.out.println("Сервер 1");*/

        if (this.getCurrentPort().getType().equals("fromPrev")) {

        V=ra.nextDouble();

        if((V<P)||(V==P)){

                   msg1.setTimeStamp(this.getLastTime() + ta);

                   mp1.setPort("toNext");

                   msg1.setData("from Server to Client: Message have being processing from" + this.getLastTime() + " till " + msg1.getTimeStamp());

                   mp1.setMessage(msg1);

                   list.add(mp1);

                   msg2.setTimeStamp(this.getLastTime()+ ta);

                   msg2.setPriority(1);

                   mp2.setPort("toPrev");

                   msg2.setData("from Server to Queue: Server is free");

                   mp2.setMessage(msg2);

                   list.add(mp2);

                  

       

        }

        else

                   if(V>P){

                            msg1.setTimeStamp(this.getLastTime() + ta);

                    mp1.setPort("Vozvrat");

                    vozvrat++;

                   /* System.out.println("Возврат с первого сервера" +V);*/

                    msg1.setData("from Server to Queue1");

                    mp1.setMessage(msg1);

                    list.add(mp1);    

                    msg2.setTimeStamp(this.getLastTime()+ ta);

                    msg2.setPriority(1);

                    mp2.setPort("toPrev");

                    msg2.setData("from Server to Queue: Server is free");

                    mp2.setMessage(msg2);

                    list.add(mp2);

        }

                  

        }

        return list;

    }

   

    protected String confluent() {

         return "external";

    }

}


Вывод

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

Подробно был изучен PDEVS-формализм и пакет моделирования систем с дискретными событиями DEJaView. Исследованы принципы функционирования простейших моделей теории массового обслуживания. Разработан и реализован алгоритм функционирования одной из моделей теории массового обслуживания, описанной в терминах PDEVS под DEJaView.


Страницы: 1, 2


Новости

Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

  скачать рефераты              скачать рефераты

Новости

скачать рефераты

Обратная связь

Поиск
Обратная связь
Реклама и размещение статей на сайте
© 2010.