Logo GenDocs.ru

Поиск по сайту:  

Загрузка...

Курсовой проект - Динамическое программирование. Динамическая задача выбора объема партий. Вариант 8.2 - файл 1.doc


Курсовой проект - Динамическое программирование. Динамическая задача выбора объема партий. Вариант 8.2
скачать (2414.5 kb.)

Доступные файлы (1):

1.doc2415kb.15.12.2011 07:15скачать

содержание

1.doc

Министерство образования и науки Российской Федерации

Федеральное агентство по образованию
ИРКУТСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ


Кафедра Автоматизированных систем

Допускаю к защите

Руководитель_____________________________

_____________________________

И.О. Фамилия

ДИНАМИЧЕСКАЯ ЗАДАЧА ВЫБОРА ОБЪЕМА ПАРТИЙ

наименование темы
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовому проекту по дисциплине
Теория Принятия Решения
Вариант 8.2

Выполнил студент группы АСУ 06-1 _______

шифр подпись И.О. Фамилия
Нормоконтролер _______

подпись И.О. Фамилия


Курсовой проект защищен

с оценкой ____________


Иркутск 2009г.

Содержание:


1. Постановка задачи 3

3. Краткие сведения о методе решения задачи 5

4. Проверка достоверности полученных результатов 8

14

^ 5. Алгоритм решения задачи 15

6. Листинг программы, реализующий алгоритм задачи 16

7. Руководство пользователя 20

7.1 Системные требования 20

7.2 Описание возможностей 20

7.3 Основное окно программы 21

7.4 Главное меню программы 22

7.5 Использование 23

7.5.1 Ввод данных 23

7.5.2 Расчет календарной программы минимальных затрат для выпуска продукции в N-ое количество отрезков (дней) 24

7.5.3 Вывод на экран графика зависимости целевой функции от коэффициента затрат на хранение продукции (S) 24

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

8. Решение задачи курсовой работы на ПЭВМ по исходным данным индивидуального варианта 26

9. Список использованной литературы 28



^

1. Постановка задачи



Предприятие должно разработать календарную программу выпуска некоторого вида изделий на плановый период, состоящий из N отрезков. Предполагается, что для каждого из отрезков известен точный прогноз спроса на выпускаемую продукцию; для разных отрезков времени спрос не одинаков. Временем изготовления партий изделий пренебрегаем. Стоимость выпуска партии зависит от ее объема. Сюда же входят затраты на наладку оборудования, которые не зависят от объёма выпускаемых изделий, но эти затраты присутствуют в каждом изготовлении партии изделий.

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

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

Число отрезков N= 8, сумма затрат на производство и содержание запасов продукции на i-ом отрезке планового периода определяется выражением



где



, .

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

Спрос по периодам равен соответственно



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

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

а) число отрезков N может быть 7, или 8, или 9;

б) спрос на каждом отрезке планового периода может быть задан

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

г) затраты на изготовление одного изделия могут быть ;

д) затраты по хранению запаса на i-ом отрезке могут вычисляться по формуле , или по формуле , или по формуле .
^ 2. Обоснование математической модели

Cумма затрат на производство и содержание запасов продукции на i-ом отрезке планового периода определяется выражением



где



, .

Здесь a - затраты на наладку оборудования в начале производства каждой партии изделий; затраты на изготовление одного изделия.
Общий вид:



Где, A > 0 – стоимость одного запуска станка,

N > 0– количество запусков станка.

B > 0– стоимость изготовления одной детали.

S > 0– стоимость хранения одной детали.

- количество деталей, произведенных в i-ый день.

- количество деталей, взятых со склада в i-ый день.

- производство, и поставка деталей не может быть отрицательной.

система ограничений, где - количество деталей производимых в i-ый день, - количество деталей получаемых со склада в i-ый день, - количество деталей сданных на склад в (i-1)-ый день, причем y для первого и последнего дня равен нулю, так как нет смысла сдавать детали на склад в последний день и невозможно получить со склада детали в первый день, так как склад пока пуст. (y1=0 и уn=0), - спрос на продукцию в i-ый день.


Математическая модель:





- Один запуск станка стоит 16 условных единиц, а производство одной детали 4. Хранение одной детали за одни сутки составляет условных единиц.

^

3. Краткие сведения о методе решения задачи


Метод динамического программирования состоит в том что оптимальное управление строится постепенно. На каждом шаге оптимизируется управление только этого шага. Вместе с тем на каждом шаге управление выбирается с учётом последствий, так как управление, оптимизирующее целевую функцию только для данного шага, может привести к неоптимальному эффекту всего процесса. Управление на каждом шаге должно быть оптимальным  с точки зрения процесса в целом. Это основное правило динамического программирования, сформулированное Беллманом, называется принципом оптимальности.

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

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

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

Назовем величину  условным минимумом. Если мы теперь выберем на k-м шаге некоторое произвольное управление , то система придет в состояние . Согласно принципу оптимальности, необходимо выбирать управление так, чтобы оно в совокупности с оптимальным управлением на последующих шагах (начиная с (k+1)-го) приводило бы к общему показателю эффективности на   шагах, начиная с k-го и до конца. Это положение в аналитической форме можно записать в виде следующего соотношения:

,

 ,      (2)

получившего название основного функционального уравнения динамического программирования, или основного рекуррентного уравнения Беллмана.

Из уравнения (2) может быть получена функция , если известно функция . Аналогично можно получить , если известно  и т. д., пока не будет определена величина , представляющая по определению значение показателя эффективности процесса в целом:

.

Решая уравнение (2) для определения условного максимума показателя эффективности за  шагов, начиная с k-го, мы определяем соответствующее оптимальное управление , при котором этот максимум достигается. Это управление также зависит от ; будем обозначать его через  и называть условным оптимальным управлением на k-м шаге. Основное значение уравнения (2), в котором реализована идея динамического программирования, заключается в том, что решение исходной задачи определения максимума функции  n переменных  сводится к решению последовательности n задач, задаваемых соотношениями (1), каждое из которых является задачей максимизации функции одной переменной .

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

Если начальное состояние  задано , то непосредственно

определяют минимум целевой функции

,

а затем - искомое безусловное оптимальное управление по цепочке

.                  (3)

Если задано множество начальных состояний , то дополнительно решают еще одну задачу на минимум

,

откуда находят , а затем по цепочке (3) - безусловное оптимальное управление.

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

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

.

Введем в рассмотрение условные минимумы показателя эффективности за k шагов, от 1-го до k-го включительно, - величину . Повторив приве­денные рассуждения, придем к следующей системе уравнений Беллмана:

;

.

В результате решения этих уравнений получим последовательности

; .

Далее определим безусловное оптимальное управление по цепочке

.


^

4. Проверка достоверности полученных результатов






1.



10





0





0





10



2.



10






0



15



0





10






0



0



15






0






10



25



0






0






10



0



25


3.



10






0



15



0



8






10






0



0



15



23






0






10



25



0



8







0






10



0



25



33

Рассчитав 3 шага, можно проверить программу, убрав ее ограничения на количество отрезков N. Подставим значения в программу:



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

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

На графике, приведенном ниже, видно, что при затратах на хранение (S) равных , целевая функция уже не зависит от S.



Проверим правильность графика, подставив в целевую функцию.




1.



10





0





0





10



2.



10






0



15



0





10






0



0



15






0






10



25



0






0






10



0



25



3.



10






0



15



0



8






10






0



0



15



23






0






10



25



0



8







0






10



0



25



33


Рассчитав 3 шага, можно проверить программу, убрав ее ограничения на количество отрезков N и поля «Затраты на хранения». Подставим значения в программу:



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

^


5. Алгоритм решения задачи





  1. Проверка правильности ввода данных.




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



  1. Подсчет значений целевой функции для каждой полученной комбинации удовлетворения спроса.




  1. Поиск минимального значения целевой функции и соответствующей ей комбинации удовлетворения спроса.




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

^

6. Листинг программы, реализующий алгоритм задачи



unit Unit1;
interface
uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ComCtrls, Grids, Menus, Math;
type

Tmas = array of array of byte;

TRec=record

days: integer;
day1: string[5];

day2: string[5];

day3: string[5];

day4: string[5];

day5: string[5];

day6: string[5];

day7: string[5];

day8: string[5];

day9: string[5];

end;
TDays=array[1..9] of integer;

var

Form1: TForm1;

F: File of Trec;

implementation
{$R *.dfm}


function GeneralFunction(XY: Tmas; Variation: integer):real;

var

SummXi, SummYi: real;

i,j,N: integer;

Ykoef: Tdays;

begin

Ykoef[1]:=StrToInt(Form1.Edit11.Text);

Ykoef[2]:=StrToInt(Form1.Edit12.Text);

Ykoef[3]:=StrToInt(Form1.Edit13.Text);

Ykoef[4]:=StrToInt(Form1.Edit14.Text);

Ykoef[5]:=StrToInt(Form1.Edit15.Text);

Ykoef[6]:=StrToInt(Form1.Edit16.Text);

Ykoef[7]:=StrToInt(Form1.Edit17.Text);

Ykoef[8]:=StrToInt(Form1.Edit18.Text);

Ykoef[9]:=StrToInt(Form1.Edit19.Text);

SummXi:=0;

SummYi:=0;

j:=Form1.TrackBar1.Position;

N:=0;
for i:=0 to 2*Form1.TrackBar1.Position-1 do

begin

if not odd(i) then

begin

SummXi:=SummXi+sqrt(XY[Variation][i]);

if XY[Variation][i]<>0 then

inc(N);

end

else

begin

SummYi:=SummYi+sqrt(XY[Variation][i] * Ykoef[j]);

dec(j);

end;

end;

GeneralFunction:=RoundTo((StrToInt(Form1.Edit20.Text)*N + StrToInt(Form1.Edit10.Text) * SummXi) + SummYi, -2);

end;
function mudoxren(range:integer; s:integer; w:integer; d:integer; var mas:Tmas; err:boolean):tmas;

var i:integer;

begin

if err then

for i:=s to s+range-1 do

mas[i][w]:=d-mas[i][w+1]+mas[i][w-1]
else

for i:=s to s+range-1 do

mas[i][w+1]:=d+mas[i][w-1]+mas[i][w];
end;
procedure TForm1.Button1Click(Sender: TObject);

var

d: Tdays;

matr: Tmas;

i,j,current_day,range,s,w,u,max_i,i1,i2: integer;

err:boolean;

res: array of real;

temp: real;

begin

d[1]:=strtoint(Edit1.Text);

d[2]:=strtoint(Edit2.Text);

d[3]:=strtoint(Edit3.Text);

d[4]:=strtoint(Edit4.Text);

d[5]:=strtoint(Edit5.Text);

d[6]:=strtoint(Edit6.Text);

d[7]:=strtoint(Edit7.Text);

d[8]:=strtoint(Edit8.Text);

d[9]:=strtoint(Edit9.Text);
SetLength(matr, Round(Power(2,TrackBar1.Position-1)), TrackBar1.Position*2-1);
for i:=0 to Round(Power(2,TrackBar1.Position-1))-1 do

for j:=0 to TrackBar1.Position*2-1 do

matr[i,j]:=0;
range:=Round(Power(2, TrackBar1.Position-1)/2);
current_day:=TrackBar1.Position;


w:=0;

err:=true;

u:=1;

repeat

s:=0;

j:=1;

for i:=0 to u do

begin

mudoxren(range,s,w,d[current_day],matr,err);

err:=not(err);

s:=j*range;

inc(j);

end;

range:=Round(range/2);

current_day:=current_day-1;


w:=w+2;

u:=(u+1)*2-1;

until u>Round(Power(2, TrackBar1.Position)-1)-1;
for i:=0 to Round(Power(2, TrackBar1.Position-1))-1 do

matr[i][TrackBar1.Position*2-2]:=matr[i][TrackBar1.Position*2-3]+d[1];


SetLength(res,Round(Power(2, TrackBar1.Position-1)));

for i:=0 to Round(Power(2, TrackBar1.Position-1))-1 do

res[i]:=GeneralFunction(matr,i);
max_i:=0;

temp:=res[0];

for i:=1 to Round(Power(2, TrackBar1.Position-1))-1 do

if temp > res[i] then

begin

temp:=res[i];

max_i:=i;

end;

i1:=TrackBar1.Position;

i2:=TrackBar1.Position;

for j:=0 to 2*TrackBar1.Position-2 do

begin

if not odd(j) then

begin

if matr[max_i][j]<>0 then

StringGrid1.Cells[2,i1]:=' '+FloatToStr(matr[max_i][j])

else

StringGrid1.Cells[2,i1]:=' - ';

StringGrid1.Cells[0,i1]:=' '+IntToStr(i1);

StringGrid1.Cells[1,i1]:=' '+IntToStr(d[i1]);

dec(i1);

end

else

begin

if matr[max_i][j]<>0 then

begin

StringGrid1.Cells[4,i2-1]:=' '+FloatToStr(matr[max_i][j]);

StringGrid1.Cells[3,i2]:=' '+FloatToStr(matr[max_i][j]);

end

else

begin

StringGrid1.Cells[4,i2-1]:=' - ';

StringGrid1.Cells[3,i2]:=' - ';

end;

dec(i2);

end;

end;
StringGrid1.Cells[4,TrackBar1.Position]:=' - ';

StringGrid1.Cells[3,1]:=' - ';

Label18.Caption:='Общие затраты: '+FloatToStr(temp)+' у.е.';

end;
end.
procedure TForm1.Button2Click(Sender: TObject);

var

d: Tdays;

matr: Tmas;

i,j,current_day,range,s,w,u,Ykoef: integer;

err:boolean;

res: array of real;

temp,temp2,min: real;

p: boolean;

begin

form2.Show;

Form2.Chart1.Series[0].Clear;

Form2.Chart1.Series[1].Clear;

Form2.Chart1.Series[2].Clear;

d[1]:=strtoint(Edit1.Text);

d[2]:=strtoint(Edit2.Text);

d[3]:=strtoint(Edit3.Text);

d[4]:=strtoint(Edit4.Text);

d[5]:=strtoint(Edit5.Text);

d[6]:=strtoint(Edit6.Text);

d[7]:=strtoint(Edit7.Text);

d[8]:=strtoint(Edit8.Text);

d[9]:=strtoint(Edit9.Text);

Ykoef:=1;

temp:=0;

p:=true;

SetLength(matr, Round(Power(2,TrackBar1.Position-1)), TrackBar1.Position*2-1);

repeat

temp2:=temp;

for i:=0 to Round(Power(2,TrackBar1.Position-1))-1 do

for j:=0 to TrackBar1.Position*2-1 do

matr[i,j]:=0;

range:=Round(Power(2, TrackBar1.Position-1)/2);

current_day:=TrackBar1.Position;

w:=0;

err:=true;

u:=1;

repeat

s:=0;

j:=1;

for i:=0 to u do

begin

mudoxren(range,s,w,d[current_day],matr,err);

err:=not(err);

s:=j*range;

inc(j);

end;

range:=Round(range/2);

current_day:=current_day-1;

w:=w+2;

u:=(u+1)*2-1;

until u>Round(Power(2, TrackBar1.Position-1))-1;

for i:=0 to Round(Power(2, TrackBar1.Position-1))-1 do

matr[i][TrackBar1.Position*2-2]:=matr[i][TrackBar1.Position*2-3]+d[1];

SetLength(res,Round(Power(2, TrackBar1.Position-1)));

for i:=0 to Round(Power(2, TrackBar1.Position-1))-1 do

res[i]:=GeneralFunction(matr,Ykoef,i);

temp:=res[0];

for i:=1 to Round(Power(2, TrackBar1.Position-1))-1 do

if temp > res[i] then

temp:=res[i];

if p then

min:=temp;

p:=false;

Form2.Chart1.Series[0].AddXY(Ykoef,temp);

inc(Ykoef);
until temp=temp2;

Form2.Chart1.Series[0].AddXY(Ykoef+8,temp);

Form2.Chart1.Series[2].AddXY(Ykoef,temp+3);

Form2.Chart1.Series[1].AddXY(0,temp);

Form2.Chart1.Series[1].AddXY(Ykoef-2,temp);

Form2.Chart1.Series[1].AddXY(Ykoef-2,min);
end;
^

7. Руководство пользователя

7.1 Системные требования


Процессор: Pentium I или аналогичный AMD 400 MHz и выше

ОЗУ: 64 Мб и более

ОС: Windows 98, 2000, ХР
^

7.2 Описание возможностей


Данная программа предназначена для расчета календарной программы выпуска некоторого вида изделий на плановый период, состоящий из N отрезков в течение 7,8 или 9 последовательных дней. Выходными данными для программы являются: минимальная стоимость затрат на выпуск и изготовление деталей.

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


7.3 Основное окно программы


Главное меню

программы

Область начальных данных





Область вывода результата Кнопка расчета результата

Кнопка вывода графика зависимости целевой функции от затрат на хранение

Кнопка выхода из программы

^

7.4 Главное меню программы


Главное меню программы содержит пункты: "Файл" и "Справка".

В пункте "Файл" находятся подпункты "Открыть", "Сохранить" и "Выход".

"Открыть" - служит для открытия файлов формата mbs. Используется для открытия файлов с сохраненными результатами расчетов в данной программе.

"Сохранить" - служит для сохранения файлов в формате mbs. Используется для сохранения результатов расчетов в файл.

"Выход" - закрывает программу без сохранения результатов.

 В пункте "Справка" находятся подпункты "Руководство пользователя" и "О программе ".

" Руководство пользователя " - содержит ссылку на данный файл справки.

"О программе " - выводит окно с информацией о программе.

 

7.5 Использование


Для начала работы с программой запустите файл dinprog.exe.
^

7.5.1 Ввод данных


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



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



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



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



Нажмите с помощью мыши на стрелочки "вверх" или "вниз" в зависимости от того хотите вы увеличить или уменьшить затраты на хранение на складе, которые вычисляются по формулам 1,2 или 3. На иллюстрации ниже затраты выставлены по умолчанию.


^

7.5.2 Расчет календарной программы минимальных затрат для выпуска продукции в N-ое количество отрезков (дней)


Для того чтобы рассчитать оптимальную программу выпуска продукции, достаточно нажать на кнопку "Рассчитать", находящуюся внизу главного окна программы.


^

7.5.3 Вывод на экран графика зависимости целевой функции от коэффициента затрат на хранение продукции (S)


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


^

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


Результат работы программы будет выведен в области вывода результата в виде таблицы, под таблицей выводится оптимальные общие затраты (затраты на наладку оборудования, затраты на изготовление продукции, затраты на хранение продукции на складе). В таблице 5 столбцов:

  1. Номер дня (отрезка).

  2. Спрос - спрос на продукцию в данный день.

  3. Произвести – какое количество продукции необходимо произвести в данный день по оптимальному плану.

  4. Получить со склада – какое количество продукции необходимо взять со склада, чтобы удовлетворить спрос на нее в данный день.

  5. Сдать на склад – какое количество продукции необходимо сдать на склад в данный день.



На графике, приведенном ниже показывается зависимость целевой функции от коэффициента затрат на хранение продукции (S). При переходе функции в прямую, можно узнать при каком значении коэффициенте S, становится невыгодно хранить продукцию на складе, а производить ее в соответствии спросу на каждый день. В данном случае видно, что функция переходит в прямую в точке 32, значит при S32 хранить продукцию на складе становиться не выгодно.




^

8. Решение задачи курсовой работы на ПЭВМ по исходным данным индивидуального варианта




Исходные данные задачи:


Вывод ответа:



Вывод графика зависимости целевой функции от коэффициента затрат на хранение (S).

^




9. Список использованной литературы





  1. Зайченко, Ю.П. Исследование операций: учебное пособие / Ю.П.Зайченко. – 2-е изд. – Киев: Вища школа, 1979. – 392 с.

  2. Куцый, Н.Н. Математические методы системного анализа и теория принятия решений: пособие по курсовой работе / Н.Н. Куцый. – Иркутск: изд-во Иркутск гос. технич. ун-та, 2008. – 79 с.

  3. Таха, Х.А. Введение в исследование операций / Хедми А. Таха. - 7-е издание.: пер. с англ. – М.: Издательский дом «Вильямс», 2005. – 912 с.

  4. Беллман, Р. Прикладные задачи динамического программирования / Р. Беллман. – М.: «Наука»,1965. – 460 с.

  5. Калихман И.Л. Динамическое программирование в примерах и задачах: Учеб. пособие. / Калихман И.Л., Войтенко М.А. – М.: Высш. школа, 1979 – 125 с.



Скачать файл (2414.5 kb.)

Поиск по сайту:  

© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации