1 динамическое программирование 5





Скачать 116.34 Kb.
Название1 динамическое программирование 5
Дата публикации27.10.2014
Размер116.34 Kb.
ТипДокументы
100-bal.ru > Математика > Документы

ВВЕДЕНИЕ 3

1 ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ 5

1.1 Задача динамического программирования 5

1.2 Общая структура динамического программирования 6

2 ЗАДАЧА О ЗАГРУЗКЕ 8

2.1 Общие сведения 8

2.2 Методы решения задачи о рюкзаке 9

2.2.1 Метод перебора 9

2.2.2 Рекуррентный метод 9

2.2.3 Жадный метод 10

ПРИЛОЖЕНИЕ А 11

Текст программы 11

Результаты работы программы 15


ВВЕДЕНИЕ



В наше время наука уделяет все большое внимание вопросам организации и управления, это приводит к необходимости анализа сложных целенаправленных процессов под углом зрения их струк­туры и организации. Потребности практики вызвали к жизни специальные методы, которые удобно объединять под названием «исследование операций». Под этим термином понимается применение математических, количественных методов для обоснования решений во всех областях целенаправленной человеческой деятельности.

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

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

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

Итерационная природа алгоритмов обычно приводит к объемным однотипным вычислениям. В этом и заключается причина того, что эти алгоритмы разрабатываются, в основном, для реализации с помощью вычислительной техники.

1 ДИНАМИЧЕСКОЕ ПРОГРАММИРОВАНИЕ

1.1 Задача динамического программирования



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

Динамическое программирование (ДП) представляет собой математический метод, который можно использовать для решения весьма широкого круга задач, включая задачи распределения ресурсов, замены и управления запасами, задачи о загрузке. Характерным для динамического программирования является подход к решению задачи по этапам, с каждым из которых ассоциирована одна управляемая переменная. Набор рекуррентных вычислительных процедур, связывающих различные этапы, обеспечивает получение допустимого оптимального решения задачи в целом при достижении последнего этапа.

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

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

Динамическое программирование – это поэтапное планирование многошагового процесса, при котором на каждом этапе оптимизируется только один шаг. Управление на каждом шаге должно выбираться с учетом всех его последствий в будущем.

1.2 Общая структура динамического программирования



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

Для реализации такого метода необходимо выяснить все ситуации, в которых может происходить выбор последнего решения. Обычно условия, в которых принимается решение, называют «состоянием» системы. Состояние системы – это описание системы, позволяющее, учитывая будущие решения, предсказать ее поведение. Нет необходимости выяснять, как возникло то ил иное состояние или каковы были предшествующие решения. Это позволяет последовательно выбирать всего по одному решению в каждый момент времени. Независимо от того, отыскивают оптимальные решения с помощью табличного метода и последующего поиска или аналитическим путем, обычно быстрее и выгоднее производить выбор по одному решению в один момент времени, переходя затем к следующему моменту и т.д. К сожалению, таким методом можно исследовать не все процессы принятия решений. Необходимым условием применения метода динамического программирования является аддитивность цен всех решений, а также независимость будущих результатов от предыстории того или иного состояния.

Если число решений очень велико, то можно построить относительные оценки состояний так, чтобы оценки, отвечающие каждой паре последовательных решений, отличались друг от друга на постоянную величину, представляющую собой средний «доход» на решение. Также можно выполнять дисконтирование доходов от будущих решений. Необходимость в этом иногда появляется в том случае, когда решение принимаются редко, скажем раз в году. Тогда уже не нужно рассматривать последовательно 1,2,3…решения, чтобы достичь решения с большим номером. Вместо этого можно непосредственно оперировать функциональным уравнением, что, как правило, дает существенную выгоду с точки зрения сокращения объема вычислений.

2 ЗАДАЧА О ЗАГРУЗКЕ

2.1 Общие сведения



Задача о загрузке – это задача о рациональной загрузке судна (самолета, автомашины и т.п.), которое имеет ограничения по объему или грузоподъемности. Каждый помещенный на судно груз приносит определенную прибыль. Задача состоит в определении загрузки судна такими грузами, которые приносят наибольшую суммарную прибыль.

Рекуррентное уравнение процедуры обратной прогонки выводится для общей задачи загрузки судна грузоподъемностью W предметов (грузов) n наименований. Пусть mi-количество предметов і-го наименования, подлежащих загрузке, ri-прибыль, которую приносит один загруженный предмет і-го наименования, wi-вес одного предмета і-го наименования. Общая задача имеет вид следующей целочисленной задачи линейного программирования.

Максимизировать z=r1m1+r2m2+…+rnmn.

при условии, что

w1m1+w2m2+…+wnmn W,

m1,m2,…,mn 0 и целые.

Три элемента модели динамического программирования определяются следующим образом:

  1. Этап і ставится в соответствии предмету і-го наименования, і=1,2,…n.

  2. Варианты решения на этапе і описываются количеством mi предметов і-го наименования, подлежащих загрузке. Соответствующая прибыль равна rimi. Значение mi заключено в пределах от 0 до [W/wi], где [W/wi] – целая часть числа W/wi.

  3. Состояние xi на этапе і выражает суммарный вес предметов, решения о погрузке которых приняты на этапах і,і+1,...n. Это определение отражает тот факт, что ограничения по весу является единственным, которое связывает n этапов вместе.

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

2.2 Методы решения задачи о рюкзаке




2.2.1 Метод перебора



Заключается в переборе всех возможных сочетай. Всегда находит оптимальное решение. Минус метода заключается в том, что при большом количестве предметов и огромной массе рюкзака необходимо достаточно много места, чтоб хранить массивы, в которых хранятся предметы и полученная сумма. Также на обработку таких массивов требуется значительное время.
Например, если количество предметов может достигать 1000, а грузоподъемность – 50000 (как в моей задаче), то количество возможных переборов равно 500001000 , а это занимает также много времени.

2.2.2 Рекуррентный метод




Для решения задачи этим методом необходимо разделить ее на шаги.

На первом шаге загружаем рюкзак только первым грузом. На втором шаге загружаем первый и второй груз. На n-ном шаге загружаем все n грузов. На каждом шаге количество загрузки определять по формуле:

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

Оптимальное решение получаем на последнем шаге, то есть для этого необходимо заполнить обе таблицы.

Минусом метода является то, что при большом количестве предметов и большой грузоподъемности таблицы получаются тоже очень большими, а хранить все в ОЗУ неудобно, так как при этом снижается скорость обработки данных.

2.2.3 Жадный метод



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

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

Преимуществом метода является также время его работы. За счет того, что отсутствует необходимость хранить огромные массивы данных.

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

ПРИЛОЖЕНИЕ А




Текст программы



procedure TForm13.Button1Click(Sender: TObject); //основной алгоритм
begin

//Ввод данных

n := StrTointDef(Edit1.Text, 0); // запоминаем количество предметов

sum := StrTointDef(Edit2.Text, 0); // запоминаем вес ранца
if n = 0 then // проверка введено ли количество предметов

begin //если не введено, то выводим сообщение

ShowMessage('Не задано количество предметов');

exit

end;
if sum = 0 then //проверка задан ли вес ранца

begin //если не заданвведено, то выводим сообщение

ShowMessage('Не задан максимальный вес ранца');

exit

end;
flag:=true; //если массивы веса и стоимости предметов были заполнены автоматически, значит они уже существуют, иначе необходимо их создать.

if flag=true then

begin

new(a);

new(sp);

end;
with StringGrid1 do

for i := 1 to n do

begin

a[i] := StrTointDef(Cells[1,i], 0); // заполнение массива А весами предметов

sp[i] := StrTointDef(Cells[2,i], 0); // и массива SP стоимостью предметов

end;
memo1.Text:='';//очищаем поле вывода от лишних записей

memo1.Text:=memo1.Text+'В рюкзак надо положить:';

ost:=sum; //переменная ost используется в расчетах для определения оставшегося свободного места

cena:=0;//переменная служит для вычисления суммарной прибыли загрузки

REPEAT

max:=0;

i:=1;

repeat // Для того, чтобы не просматривать предметы, которые уже уложены в рюкзак или которые слишком тяжелы для него, обнуляется значение стоимости. В цикле присваиваем ячейке max первое ненулевое значение.

if sp[i]<>0 then max:=sp[i]

else i:=i+1

until max<>0;
for i:=1 to n do //находим максимальное значение стоимости

if sp[i]>max then max:=sp[i];

k:=0;

new(m1); //создаем динамические массивы для промежуточных результатов

new(m2);

new(num);

for i:=1 to n do //max найден, записываем в массив М все значения, стоимость которых равен max

if sp[i]=max then

begin

k:=k+1;

m1[k]:=a[i];//хранит веса предметов

m2[k]:=sp[i];//хранит стоимость предметов

num[k]:=i; //сохраняем номера предметов

end;

min:=m1[1];// присваиваем ячейке min первое значение массива весов предметов для поиска минимального веса в массиве

nom:=num[1];.. записываем номер этого предмета для удобства проверки результата

for i:=1 to k do //среди предметов с наибольшей стоимостью находим минимальный вес

if m1[i]
begin

min:=m1[i];//если вес меньше, то запоминем новое значение веса

nom:=num[i];// и номер предмета, который имеет этот вес

end;

s:=a[nom]; //ячейка s содержит значение веса предмета, который сейчас будет положен в рюкзак

kolvo:=ost div s;//количество предметов с максимальной стоимостью и минимальным весом равно целой части от деления общей грузоподъемности рюкзака на вес укладываемого предмета

Memo1.Lines.Add(inttostr(nom)+' предмет '+inttostr(kolvo)+' штук;');//вывод результатов на экран

cena:=cena+kolvo*sp[nom];// рачсет полученной прибыли

ost:=ost-kolvo*a[nom];// расчет оставшегося места

for i:=1 to k do //обнуляем стоимость,чтобы больше не просматривать эти значения

begin

a[num[i]]:=0;

sp[num[i]]:=0;

end;

min:=0;

i:=1;

repeat //сравниваем минимальное значение веса с остаавшимся

if a[i]<>0 then min:=a[i] //проверяем, есть ли предмет,вес которого не равен нулю

else i:=i+1

until (min<>0) or (i>n);
dispose(m1);//уничтожение динамических массивов

dispose(m2);

dispose(num)

UNTIL (min>ost) or (min=0);//основной алгоритм завершается, когда минимальное значение веса больше оставшегося места

//новый алгоритм

Memo1.Lines.Add('Прибыль в условных единицах ');

Memo1.Text:=memo1.Text+ IntToStr(cena);//вывод результата на экран
dispose(sp);// уничтожение динамических массивов

dispose(a);
end; //окончание основной алгоритм

ПРИЛОЖЕНИЕ Б

Результаты работы программы



Если не введено количество предметов, то выводится следующие сообщение:


Если не введена грузоподъемность рюкзака, то выводится следующее сообщение:


Если все данные введены, то результаты работы программы выглядят так:



СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ


  1. Таха Х. Введение в исследование операций.–М.: Мир,1985.

  2. Кузнецов Ю. Н. Математическое программирование. –М.: Наука,1976.

  3. Вентцель Е. С. Элементы динамического программирования. –М.: Наука,1987.


Добавить документ в свой блог или на сайт

Похожие:

1 динамическое программирование 5 icon«Динамическое Web-Программирование»
Целью курса "Динамическое Web-Программирование" является изучение принципов разработки приложений, работающих в среде Интернет и...
1 динамическое программирование 5 icon«программирование»
Рабочая программа дисциплины «Программирование» /сост. Хатаева Р. С.– Грозный: чгпи, 2011г
1 динамическое программирование 5 icon12 Достижения компьютерной техники 15 Программирование
Программирование 3
1 динамическое программирование 5 iconПрограмма по формированию навыков безопасного поведения на дорогах...
Понятно, что программирование стержень профильного курса информатики. Но какова его роль и есть ли необходимость изучать программирование...
1 динамическое программирование 5 iconРабочая программа дисциплины оп. 08 Теория алгоритмов (с дополнениями...
Специальность 09. 02. 03 «Программирование компьютерных систем» (базовая подготовка)
1 динамическое программирование 5 iconПатентам и товарным знакам (19)
...
1 динамическое программирование 5 icon«Динамическое оперативное запоминающее устройство бортовой эвм» (шифр...
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
1 динамическое программирование 5 iconОсновная образовательная программа среднего профессионального образования...
Нормативные документы для разработки ооп спо по специальности 230115 Программирование в компьютерных системах
1 динамическое программирование 5 iconОтчет о научно-исследовательской работе
Мультиагентные системы, онтологии, редактор онтологии, редактор сцен, сетецентрические сети, динамическое планирование, высокоскоростной...
1 динамическое программирование 5 iconГарбузова Анна студентка 1 курса
Результат выполнения запроса представляет собой динамическое подмножество таблицы. Здесь под термином динамический подразумевается...
1 динамическое программирование 5 iconРабочая программа по дисциплине “алгоритмизация и программирование”...
Алгоритмизация и программирование” составлена в соответствии с требованиями Государственного общеобразовательного стандарта высшего...
1 динамическое программирование 5 iconПрограмма учебной дисциплины технические средства информатизации...
Рабочая программа учебной дисциплины разработана на основе Федерального государственного образовательного стандарта (далее – фгос)...
1 динамическое программирование 5 iconСамостоятельная работа Методические указания к выполнению самостоятельной...
Методические указания выполнению самостоятельной работы по курсу «Информатика» и «Информатика и программирование»: Авт сост Н. В....
1 динамическое программирование 5 iconОбзор цифровых образовательных ресурсов, рекомендованных Министерством...
Программа предназначена для проведения квалификационных испытаний в рамках процедуры аттестации педагогических работников по должности...
1 динамическое программирование 5 iconИздательство «лори» сообщает о выходе новых книг: В. Штерн С++
Книга научит читателя пользоваться всеми средствами ansi/iso c++ с точки зрения программной инженерии. В ней рассмотрены: классы,...
1 динамическое программирование 5 iconМгппу
«динамическое базовое свойство человеческого существования. Прошлое и будущее – два аспекта поведения Будущее детерминируется настоящим,...


Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
100-bal.ru
Поиск