Решение транспортной задачи распределительным методом

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

Транспортная задача (задача Монжа — Канторовича) — математическая задача линейного программирования <#»600964.files/image001.gif»>, в которых сосредоточен однотипный груз в количестве . Имеется и 5 пунктов назначения Решение транспортной задачи распределительным методом 1. Каждый пункт подает заявку на груз в количестве .

Таблица 2.1 — Матрица стоимостей

2

4

7

10

8

8

3

10

1

2

5

4

6

7

9

1

10

7

5

3

4

8

9

2

1

Общие данные представлены в виде таблицы 2.2.

B1

B2

B3

B4

B5

ai

A1

2

4

7

10

8

37

A2

8

3

10

1

2

12

A3

5

4

6

7

9

33

A4

1

10

7

5

3

26

A5

4

8

9

2

1

42

bi

40

18

37

23

32

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

Программа должна быть написана на алгоритмическом языке ActionScript 3.0 и отлажена на IBM совместимом компьютере.

Метод наименьших стоимостей.

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

Пункт 1. Сначала во всей транспортной таблице выбирается клетка с наименьшей стоимостью. Переменной в этой клетке присваивается максимально допустимое значение, допускаемое ограничениями на заявки и запасы, т.е. Таблица матрица стоимостей 1 .

Пункт 2. Если полностью реализован запас, т.е. , то вычеркивается i-тая строка. Если же полностью выполнена заявка, т.е. Таблица матрица стоимостей 2, то вычеркивается j-тый столбец. Если одновременно удовлетворяет заявка и исчерпывается запас, то обычно вычеркивается j-тый столбец. Затем корректируются значения запасов или заявок, уменьшая их величину на .

Пункт 3. Процесс заканчивается, если осталась одна невычеркнутая строка или один столбец. В противном случае, возвращаемся к пункту 1.

Пример:

Имеется m пунктов отправления Таблица матрица стоимостей 3 , в которых сосредоточен однотипный груз в количестве . Имеется и n пунктов назначения Таблица матрица стоимостей 4. Каждый пункт подает заявку на груз в количестве Таблица матрица стоимостей 5. Сумма всех заказов равна сумме всех заявок.

Таблица матрица стоимостей 6

Стоимость перевозки одного груза из i-го пункта отправления в j-ый пункт назначения задается . Требуется составить такой план перевозок, чтобы все запасы были исчерпаны и все заявки были удовлетворены, а общая стоимость всех перевозок должна быть минимальной.

Обозначим через количество единицы груза, отправляемого из i-го пункта отправления в j-ый пункт назначения.

Получим матрицу перевозок

Таблица матрица стоимостей 7

Рисунок 3.1 — Матрица перевозок

А вершины называют перевозками.

>0

Перевозки удовлетворяют двум условиям:

1. Суммарное количество груза, вывозимого из каждого пункта отправления во все пункты назначения, равно запасу груза в каждом пункте отправления.

Рисунок матрица перевозок 1

Рисунок 3.2 — Суммарное количество груза

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

Рисунок суммарное количество груза 1

Рисунок 3.3 -Суммарное количество груза, привозимого в каждый пункт назначения из всех пунктов отправления

Суммарная стоимость всех перевозок должна быть минимальной.

Рисунок суммарное количество груза 2

Особенностью данной задачи является то, что все коэффициенты при неизвестных системах равны единице. Это значительно упрощает решение задачи. транспортная задача алгоритм программа

Все уравнения этой системы можно решить количеством базисных переменных, выразив их через свободные. Количество свободных переменных равно (m-1)*(n-1).

План перевозок называется допустимым, если все заявки удовлетворены и все запасы исчерпаны.

Допустимый план называется оптимальным, если среди всех планов он приводит к минимальной стоимости.

При решении транспортной задачи повторяются решение симплексного метода. Но способ проверки видоизменен.

Основные шаги алгоритма решения транспортной задачи:

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

4. Схемы алгоритма программы

 схемы алгоритма программы 1

4.2 Схема алгоритма метода newPlan

 схемы алгоритма программы 2

 схемы алгоритма программы 3

Даны сходные данные:

Таблица 5.1 — Опорный план

B1

B2

B3

B4

B5

ai

A1

2

4

7

10

8

37

A2

8

3

10

1

2

12

A3

5

4

6

7

9

33

A4

1

10

7

5

3

26

A5

4

8

9

2

1

42

bi

40

18

37

23

32

B1

B2

B3

B4

B5

ai

A1

2

4

7

10

8

37

A2

8

3

10

12

1

2

0

A3

5

4

6

7

9

33

A4

26

1

10

7

5

3

26

A5

4

8

9

2

1

42

bi

40

18

37

11

32

B1

B2

B3

B4

B5

ai

A1

2

4

7

10

8

37

A2

8

3

10

12

1

2

0

A3

5

4

6

7

9

33

A4

26

1

10

7

5

3

0

A5

4

8

9

2

32

1

10

bi

14

18

37

11

0

B1

B2

B3

B4

B5

ai

A1

14

2

4

7

10

8

23

A2

8

3

10

12

1

2

0

A3

5

4

6

7

9

33

A4

26

1

10

7

5

3

0

A5

4

8

9

10

2

32

1

bi

0

18

37

1

0

B1

B2

B3

B4

B5

ai

A1

14

2

18

4

7

10

8

5

A2

8

3

10

12

1

2

0

A3

5

4

6

7

9

33

A4

26

1

10

7

5

3

0

A5

4

8

9

10

2

32

1

0

bi

0

0

37

1

0

B1

B2

B3

B4

B5

ai

A1

14

2

18

4

4

7

10

8

5

A2

8

3

10

12

1

2

0

A3

5

4

33

6

7

9

0

A4

26

1

10

7

5

3

0

A5

4

8

9

10

2

32

1

0

bi

0

0

4

1

0

B1

B2

B3

B4

B5

ai

A1

14

2

18

4

4

7

1

10

8

1

A2

8

3

10

12

1

2

0

A3

5

4

33

6

7

9

0

A4

26

1

10

7

5

3

0

A5

4

8

9

10

2

32

1

0

bi

0

0

0

1

0

B1

B2

B3

B4

B5

ai

A1

14

2

18

4

4

7

1

10

8

0

A2

8

3

10

12

1

2

0

A3

5

4

33

6

7

9

0

A4

26

1

10

7

5

3

0

A5

4

8

9

10

2

32

1

0

bi

0

0

0

0

0

B1

B2

B3

B4

B5

ai

A1

14

2

18

4

4

7

1

10

8

37

A2

8

3

10

12

1

2

12

A3

5

4

33

6

7

9

33

A4

26

1

10

7

5

3

12

A5

4

8

9

10

2

32

1

42

bi

40

18

37

23

32

Для каждой свободной клетки построим цикл и определим его стоимость

Y21 = 15 >0 Y53 = 10 >0= 4 >0 Y34 = -2 <0 = 10 >0 Y44 = -4 <0= 8 >0 Y15 = -1 <0

Y52 = 12 >0 Y25 = 2 >023 = 12 >0 Y43 = 1 >0

Y32 = 1 >0 Y45 = -1 <0

B1

B2

B3

B4

B5

ai

A1

14

2

18

4

4

7

1

10

+

8

37

A2

8

3

10

12

1

2

12

A3

5

4

33

6

7

9

33

A4

26

1

10

7

5

3

12

A5

4

8

9

10

2

32

1

42

bi

40

18

37

23

32

Стоимость плана = 426-1=425

B1

B2

B3

B4

B5

ai

14

2

18

4

4

7

10

1

8

37

A2

8

3

10

12

1

2

12

A3

5

4

33

6

+

7

9

33

A4

26

1

10

7

5

3

12

A5

4

8

9

11

2

31

1

42

bi

40

18

37

23

32

Стоимость плана = 425- 1=424

B1

B2

B3

B4

B5

ai

A1

14

2

18

4

5

7

10

8

37

A2

8

3

10

12

1

2

12

A3

5

4

32

6

1

7

9

33

A4

26

1

10

7

+

5

3

12

A5

4

8

9

10

2

32

1

42

bi

40

18

37

23

32

Стоимость плана = 424-1=423

B1

B2

B3

B4

B5

ai

A1

15

2

18

4

4

7

10

8

37

A2

8

3

10

12

1

2

12

A3

5

4

33

6

7

9

33

A4

25

1

10

7

1

5

+

3

12

A5

4

8

9

10

2

32

1

42

bi

40

18

37

23

32

Стоимость плана = 424-1=422

B1

B2

B3

B4

B5

ai

A1

15

2

18

4

4

7

10

8

37

A2

8

3

10

12

1

2

12

A3

5

4

33

6

7

9

33

A4

25

1

10

7

5

1

3

12

A5

4

8

9

11

2

31

1

42

bi

40

18

37

23

32

  • к. для всех клеток цены циклов положительны, то дальнейшее улучшение плана невозможно, что означает, что мы нашли оптимальный план.

План оптимален.

Таблица 5.7 — Оптимальный план

B1B2B3B4B5ai

A1

4

8

9

19

2

23

1

42

A2

8

3

10

12

1

2

12

A3

5

9

4

18

6

6

7

9

33

A4

26

1

10

7

5

3

26

A5

6

2

31

4

7

10

8

37

bi

32

40

18

37

23

Листинг программы приведен в приложении А, а результаты её выполнения — в приложении Б.

Минимальные системные требования:

ОС: Windows 8/7/Vista/XP/2000/ME/98/95

8мб HDD памяти. Клавиатура.

Для начала работы с программой необходимо запустить файл transport.exe.

Рисунок 6.1)

Рисунок  1

Рисунок 6.1 — Контекстное меню «Просмотр»

(Рисунок 6.2)

Рисунок контекстное меню просмотр  1

Рисунок 6.2 — Меню программы

(Рисунок 6.3)

Рисунок меню программы 1

Рисунок 6.3 — Подготовка построения плана

(Рисунок 6.4)

Рисунок подготовка построения плана 1

Рисунок 6.4 — Таблица решения

(Рисунок 6.5)

Рисунок таблица решения 1

Рисунок 6.5 — Вызов подсказки

(Рисунок 6.6)

Рисунок вызов подсказки 1

Рисунок 6.6 — Первый план решения

(Рисунок 6.7)

Рисунок первый план решения 1

Рисунок 6.7 — Выбранный цикл решения транспортной задачи

(Рисунок 6.8)

Рисунок выбранный цикл решения транспортной задачи 1

Рисунок 6.8 — Завершение работы программы

С помощью данной программы вы сможете без труда производить вычисления по транспортной задаче. Интерфейс программы удобен и приятен.

2 Колин Мук ActionScript 3.0 для Flash. Подробное руководство.

Листинг программы

/*

_____________________________________________________________

Курсовой проект

Тема «Решение транспортной задачи»

_____________________________________________________________

Язык: ActionScript 3.0

Кодировка: ASCII (win.1251)

Среда: Adobe Flash CS6.0

Разработали:

А. В. Андронов

С. А. Соколов

А.Ю. Бадаев

А.В. Никитин

Е.А. Туровский

Дата: 1 ноября 2012г

_____________________________________________________________

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

_____________________________________________________________

Используемые глобальные константы:_HEIGHT — высота сцены;_WIDTH — ширина сцены.

_____________________________________________________________Используемые глобальные переменные класса:

  • класс управления задачей;
  • главное меню;
  • информация о программе.

_____________________________________________________________

Используемые методы класса:

  • инициализация программы;
  • создание нового плана;
  • удаление главного меню;
  • удаление плана;
  • создание главного меню;
  • информация о программе.

_____________________________________________________________

*/src

{flash.display.MovieClip;flash.events.Event;src.transport.*;flash.events.MouseEvent;class Main extends MovieClip

{static var STAGE_HEIGHT:int=580,STAGE_WIDTH:int=789;var task:Task;var mm:MainMenu;var a:About;

/*

_____________________________________________________________

Метод enterSize — ввод количества заявок и запасов.

_____________________________________________________________

*/ public function Main()

{(Event.ADDED_TO_STAGE, init);

}

/*

_____________________________________________________________

Метод init — инициализация программы.

_____________________________________________________________

Формальный параметр:

e — событие.

*/ private function init(e:Event):void

{(Event.ADDED_TO_STAGE, init);_HEIGHT = stage.height;_WIDTH = stage.width;(new TEvent(TEvent.FIRST_TRANSPORT));

}

/*

_____________________________________________________________

Метод nTask — создание нового плана.

_____________________________________________________________

Формальный параметр: — событие мышки.

_____________________________________________________________

*/ private function nTask(e:MouseEvent):void

{(a)

{(a);= null;

}(task)

{();

}

{=new Task();.enterSize();(task);.addEventListener(TEvent.END_TRANSPORT,showMenu);.addEventListener(TEvent.NEW_TRANSPORT,clearMenu);

}

}//end

/*

_____________________________________________________________

Метод clearMenu — удаление главного меню.

_____________________________________________________________

Формальный параметр: — событие.

_____________________________________________________________

*/ private function clearMenu(e:TEvent):void

{.new_task.removeEventListener(MouseEvent.CLICK,nTask);.about.removeEventListener(MouseEvent.CLICK,about);(mm);= null;

}

/*

_____________________________________________________________

Метод clearTask — удаление плана.

_____________________________________________________________

*/ private function clearTask():void

{.removeEventListener(TEvent.END_TRANSPORT,showMenu);.removeEventListener(TEvent.NEW_TRANSPORT,clearMenu);(task);= null;

}//end

/*

_____________________________________________________________

Метод showMenu — создание главного меню.

_____________________________________________________________

Формальный параметр: — событие.

_____________________________________________________________

*/ private function showMenu(e:TEvent):void

{(e.type == TEvent.END_TRANSPORT)

{();

  • }=new MainMenu();.x = STAGE_WIDTH — mm.width;.y = STAGE_HEIGHT/2-mm.height/2;(mm);.new_task.addEventListener(MouseEvent.CLICK,nTask);.about.addEventListener(MouseEvent.CLICK,about);

}//end

/*

_____________________________________________________________

Метод about — информация о программе.

_____________________________________________________________

Формальный параметр: — событие мышки.

_____________________________________________________________

*/ private function about(e:MouseEvent):void

{(a)

{(a);= null;

}

{=new About();.x = STAGE_WIDTH / 2 — a.width / 2;.y = STAGE_HEIGHT / 2 — a.height / 2;(a);

}

}//end

}//end class

}//end package

/*

_____________________________________________________________

Класс программы управления задачей.

_____________________________________________________________

Используемые глобальные переменные класса:

  • класс матрицы перевозок;, stock — вектора заявок и запасов соответственно;, — контейнеры объектов запасов и заявок;, — количество заявок и запасов;
  • класс элементов управления;
  • класс подсказки;
  • класс формы ввода подсказки.

_____________________________________________________________

Используемые методы класса:

  • вывод информации;
  • ввод размера матрицы перевозок;
  • проверка ввода размера матрицы перевозок;
  • создание и вывод на экран матрицы, кнопок;
  • вывод подсказки;
  • выход в главное меню программы;
  • постраение первого плана;
  • постраение следующего плана;
  • суммирует элементы вектора запасов или заявок;
  • создание и вывод на экран векторов запасов и заявок;
  • добавление в вектор заявок элемента;
  • добавление в вектор запасов элемента;
  • ограничение доступа ввода запасов и заявок;
  • проверка корректности ввода значений запасов и заявок.

_____________________________________________________________

*/src

{flash.display.MovieClip;src.transport.data.*;src.transport.*;flash.events.MouseEvent;flash.display.Sprite;class Task extends MovieClip

{var m:Mat;var store:Array,stock:Array;var dataConStore:Sprite,dataConStock:Sprite;var kolZayavok:int,kolZapasov:int;var control:BandControl;var hint:Hint;var sizeForm:FormSize;

/*

_____________________________________________________________

Конструктор класса.

_____________________________________________________________

*/ public function Task()

{= new Hint();.x = Main.STAGE_WIDTH / 2 — hint.width / 2;.y = Main.STAGE_HEIGHT / 2 — hint.height / 2;

}//end

/*

_____________________________________________________________

Метод H — выводит информацию на экран.

_____________________________________________________________

Формальный параметр: — строка информации.

_____________________________________________________________

*/ private function H(s:String):void

{.hint = s;(hint);

}//end

/*

_____________________________________________________________

Метод enterSize — ввод количества заявок и запасов.

_____________________________________________________________

*/ public function enterSize():void

{=new FormSize();.y = Main.STAGE_HEIGHT / 2 — sizeForm.height / 2;(sizeForm);.ok.addEventListener(MouseEvent.CLICK,checkedSize);

}//end

/*

_____________________________________________________________

Метод checkedSize — проверка правильности заполнения полей

размеров.

_____________________________________________________________

Формальный параметр: — событие мышки.

_____________________________________________________________

*/ private function checkedSize(e:MouseEvent):void

{(sizeForm.check)

{.ok.removeEventListener(MouseEvent.CLICK,enterData);(sizeForm);= int(sizeForm.kolzaya.text);= int(sizeForm.kolzap.text);

  • sizeForm = null;();

}

{(‘\n\nНе правильный ввод!\n Все поля должны быть заполнены!’);

}

}//end

/*

_____________________________________________________________

Метод enterData — создание и вывод на экран матрицы, кнопок.

_____________________________________________________________

*/ private function enterData():void

{= new BandControl();.y = 0;(control);.btnNext.addEventListener(MouseEvent.CLICK,firstPlan);.menu.addEventListener(MouseEvent.CLICK,goMenu);.hint_btn.addEventListener(MouseEvent.CLICK,showHint);=new Mat();.y = 40;.x = 40;.showMat(kolZayavok,kolZapasov);(m);

  • showSS();(‘Заполните поля цены, поля заявок и поля запасов.\nИ нажмите кнопку «Далее» для продолжения…’);

}//end

/*

_____________________________________________________________

Метод showHint — вывод подсказки.

_____________________________________________________________

*/ private function showHint(e:MouseEvent):void

{.gotoAndStop(2);.visible = true;

  • addChild(hint);

}//end

/*

_____________________________________________________________

Метод goMenu — выход в главное меню программы.

_____________________________________________________________

Формальный параметр: — событие мышки.

_____________________________________________________________

*/ private function goMenu(e:MouseEvent):void

{.btnNext.removeEventListener(MouseEvent.CLICK,firstPlan);.menu.removeEventListener(MouseEvent.CLICK,goMenu);.hint_btn.removeEventListener(MouseEvent.CLICK,showHint);(new TEvent(TEvent.END_TRANSPORT));

}//end

/*

_____________________________________________________________

Метод firstPlan — постраение первого плана.

_____________________________________________________________

Формальный параметр: — событие мышки.

_____________________________________________________________

Переменные используемые в методе:, sZap — сумма элементов вектора заявок, сумма элементов

вектора запасов.

_____________________________________________________________

*/ private function firstPlan(e:MouseEvent):void

{sZaya:int = sumElementsVector(store,kolZayavok);sZap:int = sumElementsVector(stock,kolZapasov);(stock.every(correctness) && store.every(correctness))

{(sZaya<sZap)

{(sZap-sZaya);

  • }if (sZaya>sZap)

{(sZaya-sZap);

}else

{.btnNext.removeEventListener(MouseEvent.CLICK,firstPlan);.stoimost_plana_txt.text = m.firstPlan(stock,store,kolZayavok,kolZapasov).toString();.btnNext.addEventListener(MouseEvent.CLICK,nextPlan);.cargo_units_txt.text = sZaya.toString();

  • H(‘Первый план поcтроен.\n Нажмите «Далее» для продолжения…’);
  • store.forEach(closeEnter);.forEach(closeEnter);

}

}

{(‘Значения полей запасов и заявок \nне должны быть равными нулю или оставаться пустыми\nпроверте правильность’);

}

}//end

/*

_____________________________________________________________

Метод nextPlan — постраение следующего плана.

_____________________________________________________________

Формальный параметр: — событие мышки.

_____________________________________________________________

*/ private function nextPlan(e:MouseEvent):void

{.visible = false;(m.newPlan(kolZayavok,kolZapasov))

{(‘\n\nПлан оптимален, задача решена.\nСтоимость плана:’+control.stoimost_plana_txt.text);.btnNext.removeEventListener(MouseEvent.CLICK,nextPlan);

}

{.stoimost_plana_txt.text = m.sumTransport(kolZayavok,kolZapasov).toString();

}

}//end

/*

_____________________________________________________________

Метод sumElementsVector — суммирует элементы вектора запасов или заявок.

_____________________________________________________________

Формальные параметры:

  • вектор;
  • количество элементов.

_____________________________________________________________

Переменная используемые в методе:

sum — сумма элементов.

_____________________________________________________________

*/ public function sumElementsVector(v:Array,m:int):int

{sum:int = 0;(var i:int=0; i<m; i++)

{+= int(v[i].stock);

  • }sum;

}//end

/*

_____________________________________________________________

Метод showSS — создание и вывод на экран векторов запасов и заявок

_____________________________________________________________

Переменные используемые в методе:

  • счетчик цикла;,xx — координаты расположения объектов.

_____________________________________________________________

*/ private function showSS():void

{yy:int = 0;i:int;= new Array();= new Sprite();.x = m.x + m.width + 10,dataConStore.y = m.y;(i=0; i<kolZayavok; i++)

{.push(new SStore());[i].y = yy;.addChild(store[i]);+= store[i].height + 5;

  • }(dataConStore);= new Array();= new Sprite();.x = m.x;.y = m.y + m.height + 10;xx:int = 0;(i=0;
  • i<kolZapasov;
  • i++)

{.push(new SStore());[i].x = xx;.addChild(stock[i]);+= stock[i].width + 5;

  • }(dataConStock);

}//end

/*

_____________________________________________________________

Метод addZaya — добавление в вектор заявок элемента.

_____________________________________________________________

Формальный параметр: — значение добавляемого элемента.

_____________________________________________________________

*/ private function addZaya(arg:int):void

{= m.addStr(kolZapasov);.push(new SStore());[kolZayavok — 1].y = dataConStore.height + 5;.addChild(store[kolZayavok-1]);[kolZayavok — 1].stock = arg.toString();.y = m.y + m.height + 10;

}//end

/*

_____________________________________________________________

Метод addZap — добавление в вектор запасов элемента.

_____________________________________________________________

Формальный параметр: — значение добавляемого элемента.

_____________________________________________________________

*/ private function addZap(arg:int):void

{= m.addSto(kolZapasov);.push(new SStore());[kolZapasov — 1].x = dataConStock.width + 5;.addChild(stock[kolZapasov -1]);[kolZapasov — 1].stock = arg.toString();.x = m.x + m.width + 10;

}//end

/*

_____________________________________________________________

Метод closeEnter — ограничение доступа ввода запасов и заявок.

_____________________________________________________________

Формальные параметры:

  • элемент для ограничения доступа;
  • индекс элемента в массиве;
  • arr — массив элементов.

_____________________________________________________________

*/ private function closeEnter(element:*, index:Number, arr:Array):void

{

element.closeStock();

}//end

/*

_____________________________________________________________

Метод correctness — проверка корректности ввода значений запасов и заявок.

_____________________________________________________________

Формальные параметры:

  • элемент для ограничения доступа;
  • индекс элемента в массиве;
  • arr — массив элементов.

_____________________________________________________________

*/ private function correctness(element:*, index:Number, arr:Array):Boolean

{element.stock>0;

}//end

}//end class

}//end package

/*

_____________________________________________________________

Класс работы с матрицой перевозок.

_____________________________________________________________

Используемые глобальные переменные класса:

  • матрица перевозок;
  • вектор цикла.

_____________________________________________________________

Используемые методы класса:

  • создание и вывод на экран матрицы перевозок;
  • подсчет стоимости плана;
  • построение первого плана; — вспомогательный метод копирования значений запасов и

заявок;

  • добавление строки в матрицу;
  • добавление столбца в матрицу;
  • построение нового плана;
  • улучшение плана перевозок;
  • визуальная очистка плана;
  • проверка завершения цикла;
  • поиск цикла;
  • добавление в вектор элемента цикла;
  • определение цены цикла.

_____________________________________________________________

*/src.transport

{flash.display.MovieClip;src.transport.data.*;class Mat extends MovieClip

{var element:Array;var cicle:Array;

/*

_____________________________________________________________

Конструктор класса.

_____________________________________________________________

*/ public function Mat()

{

}

/*

_____________________________________________________________

Метод showMat — создание и вывод на экран матрицы перевозок.

_____________________________________________________________

Формальные параметры:

  • количество строк;
  • количество столбцов.

_____________________________________________________________

Переменные используемые в методе:,xx — координаты расположения элементов.

_____________________________________________________________

*/ public function showMat(n:int,m:int):void

{xx:int = 0,yy:int = 0;= new Array(n);(var i:int=0; i<n; i++)

{[i] = new Array(m);(var j:int=0; j<m; j++)

{[i][j]= new Element();[i][j].x = xx;[i][j].y = yy;(element[i][j]);+= element[i][j].width + 5;

  • }= 0;+= element[i][j — 1].height + 5;

}

}//end

/*

_____________________________________________________________

Метод sumTransport — подсчет стоимости плана.

_____________________________________________________________

Формальные параметры:

  • количество строк;
  • количество столбцов.

_____________________________________________________________

Переменная используемые в методе:

sum — сумма элементов.

_____________________________________________________________

*/ public function sumTransport(n:int,m:int):int

{sum:int = 0;(var i:int=0; i<n; i++)

{(var j:int=0; j<m; j++)

{+= element[i][j].stoimost * element[i][j].perevozka;

}

}sum;

}//end

/*

_____________________________________________________________

Метод firstPlan — построение первого плана.

_____________________________________________________________

Формальные параметры:

  • количество строк;
  • количество столбцов;
  • _a — вектор запасов;
  • _b — вектор заявок;

_____________________________________________________________

Переменные используемые в методе:, j, k — счетчики. — вектор запасов;

  • вектор заявок;
  • минимальная стоимость;, J — индексы элемента;
  • стоимость первого плана;
  • p — количество груза.

_____________________________________________________________

*/ public function firstPlan(_a:Array,_b:Array,n:int,m:int):int

{i:int,j:int;a:Array = _a.map(getValue);b:Array = _b.map(getValue);min:int,k:int,J:int,I:int,sum:int = 0,p:int = 0;(k=0; k<(n+m-1); k++)

{= 1000;(i=0; i<n; i++)

{(b[i] > 0)

{(j=0; j<m; j++)

{(min>element[i][j].stoimost&&(a[j]>0))

{= element[i][j].stoimost;= i;= j;

}

}

}

}(! element[I][J].bazis)

{=(a[J]<b[I])?a[J]:b[I];[J] -= p;[I] -= p;[I][J].perevozka = p;[I][J].bazis = true;+= min * p;

}

{= 0;(i<n)

{(j=0; j<m; j++)

{(! element[i][j].bazis)

{[i][j].bazis = true;= n;;

}

}++;

}

}

}sum;

}//end

/*

_____________________________________________________________

Метод getValue — вспомогательный метод копирования значений

запасов и заявок.

_____________________________________________________________

Формальные параметры:

  • элемент для ограничения доступа;
  • индекс элемента в массиве;
  • arr — массив элементов.

_____________________________________________________________

*/ private function getValue(element:*, index:int, arr:Array):int

{element.stock;

}//end

/*

_____________________________________________________________