p align="left">s(t) - p + r(0) - u(0) > r(t) - u(t) Если же s(t) - p + r(0) - u(0) < r(0) - u(0) то старое оборудование целесообразно сохранить. Итак, для последнего года оптимальная политика и максимальная прибыль F1(t) находятся из условия Пусть k = 2, т. е. рассмотрим прибыль за два последних года. Де лаем предположение о возможном состоянии t оборудования на начало предпоследнего года. Если в начале этого года принять решение о со хранении оборудования, то к концу года будет получена прибыль r(t) u(t). На начало последнего года оборудование перейдет в состоя ние t + 1 и при оптимальной политике в последнем году оно принесет прибыль, равную F1 (t+1). Значит общая прибыль за два года составит r(t) u(t) + F1(t + 1). Если же в начале предпоследнего года будет принято решение о замене оборудования, то прибыль за предпоследий год составит s(t) p + r(0) - u(0). Поскольку приобретено но вое оборудование, на начало последнего года оно будет в состоянии t = 1. Следовательно, общая прибыль за последние два года при оптимальной политике в последнем году составит s(t) - p + r(0) - u(0) + F1(1) Условно оптимальной в последние два года будет политика, доставляющая максимальную прибыль Аналогично находим выражения для условно оптимальной прибыли за три последних года, четыре и т. д. При k=T получим max Z = FT (t0). Таким образом, разворачивая весь процесс от конца к началу, получаем, что максимальная прибыль за плановый период Т составит FT(t0). Так как начальное состояние t0 известно, из выражения для FT(t0) находим оптимальное решение в начале первого года, потом вытекающее из него оптимальное решение для второго года и т. д. Обратимся к числовому примеру. Практическое применение рассмотренной выше схемы представлено в приложении. 3. Расчет показателей экономико-математической модели Решим задачу замены оборудования на плановый период в N = 10 лет, оборудование пятилетнего возраста (T = 5). В начале планового периода продолжительности в N лет имеется оборудование возраста t, известна стоимость r(t) продукции, производимой в течение года с использованием этого оборудования; ежегодные расходы u(t) связанные с эксплуатацией оборудования; его остаточная стоимость s; стоимость p нового оборудования (сюда же включены затраты, связанные с установкой, запуском оборудования). Данные задачи приведены в таблице. |
| Возраст оборудования | | | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | | r(t) | 30 | 30 | 29 | 29 | 29 | 28 | 28 | 27 | 27 | 26 | 26 | | u(t) | 10 | 10 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | | |
Для решения задания применим принцип оптимальности Беллмана. Рассмотрим интервалы времени, т.е. годы, планового периода от конца к началу. Обозначим функцию условно-оптимальных значений функции цели Fk(t) - максимальную прибыль, которая будет получена от использования оборудования возраста t лет за последние k лет планового периода. Запишем функциональные уравнения для последнего года планового периода F1(t) и последних k лет планового периода Fk(t) при исходных числовых значениях параметра: Пользуясь этими выражениями, будем последовательно вычислять значения максимальной прибыли Fk(t) и записывать их в табл. 1. Первую строку получим, придавая параметру t в равенстве (1) значения 0, 1, 2, +, 10 и используя исходные данные. Например при t = 0: = 20 (сохранение). Аналогично расчет ведется до t = 9: = 7 (сохранение). Заметим, что если прибыль от нового оборудования ровна прибыли от старого, то старое лучше сохранить еще на год. При t = 10= = = 7 (замена). Из табл.1 видно, что r(t) - л(t) с ростом t убывает. Поэтому при t > 9 оптимальной будет политика замены оборудования. Чтобы различать, в результате какой политики получается условно-оптимальное значение прибыли, будем эти значения разграничивать (до t = 9 включительно оптимальной является политика сохранения). Для заполнения второй строки табл.1, используем формулу (2) для k = 2: Придавая параметру t значения 0, 1, 2,+ ,10, используя исходные данные и значения F1(t+1) из первой строки таблицы, заполним вторую строку. Например, при t = 4= = =28(сохранение). Для третьей строки таблицы используем формулу (2) для k = 3:= = и т.д. Таблица 1 |
т | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | | F1(t) | 20 | 20 | 17 | 16 | 15 | 13 | 12 | 10 | 9 | 7 | 7 | | F2(t) | 40 | 37 | 33 | 31 | 28 | 27 | 27 | 27 | 27 | 27 | 27 | | F3(t) | 57 | 53 | 48 | 44 | 44 | 44 | 44 | 44 | 44 | 44 | 44 | | F4(t) | 73 | 68 | 61 | 60 | 60 | 60 | 60 | 60 | 60 | 60 | 60 | | F5(t) | 88 | 81 | 77 | 76 | 75 | 75 | 75 | 75 | 75 | 75 | 75 | | F6(t) | 101 | 97 | 93 | 91 | 90 | 88 | 88 | 88 | 88 | 88 | 88 | | F7(t) | 117 | 113 | 108 | 106 | 104 | 104 | 104 | 104 | 104 | 104 | 104 | | F8(t) | 133 | 128 | 123 | 120 | 120 | 120 | 120 | 120 | 120 | 120 | 120 | | F9(t) | 148 | 143 | 137 | 136 | 135 | 135 | 135 | 135 | 135 | 135 | 135 | | F10(t) | 163 | 157 | 153 | 151 | 150 | 150 | 150 | 150 | 150 | 150 | 150 | | |
Пусть, например, в начале планового периода имелось оборудование возраста T = 5 лет. Разработаем политику "замен" на десятилетний период доставляющий максимальную прибыль. Информация для этого представлена в табл.1 на пересечении столбца t = 5 строки F10(t); она составляет 150 единиц. Значение максимальной прибыли F10(5) = 150 записано в области "политики замены". Это значит, что для достижения в течение 10 лет максимальной прибыли в начале первого года оборудование надо заменить. В течение первого года новое оборудование постареет на год, т.е., заменив оборудование и проработав на нем год, за 9 лет до конца планового периода будем иметь оборудование возраста 1 год. Из табл. 1 берем F9(1) = 143. Это значение располагается в области "политики сохранения", т.е. во втором году планового периода надо сохранить оборудование возраста 1 год, и, проработав на нем год, за 8 лет до конца планового периода будем иметь оборудование возраста 2 года. Значение F8(2) = 123 помещено в области сохранения. Работаем на оборудовании еще год. Теперь до конца планового периода осталось 7 лет, а возраст оборудования составляет 3 года. Находим F7(3) = 106. Это область сохранения. Работаем на оборудовании еще год. Его возраст становится равным 4 годам. До конца планового периода остается 6 лет. Определяем F6(4) = 90. Это область сохранения. Работаем на оборудовании еще год. Его возраст становится равным 5 годам. До конца планового периода остается 5 лет. Определяем F5(5) = 75. Это область замен. Заменяем оборудование на новое. Проработаем на нем в течение пятого года. Оно постареет на год. До конца планового периода остается 4 года. Продолжая подобные рассуждения, получим, что F4(1) = 68, F3(2) = 48, F2(3) = 31, F1(4) = 15 расположены в области сохранения. Разработанную политику изобразим следующей цепочкой: F10(5) F9(1) F8(2) F7(3) F6(4) F5(5) F4(1) F3(2) F2(3) F1(4) Из табл.1 можно найти оптимальную стратегию замены оборудования с любым начальным состоянием от 0 до 10 лет и на любой плановый период, не превосходящий 10 лет. В приложении рассмотрена задача для любого начального возраста оборудования и для любого расчетного периода. Список использованных источников 1. А.В. Кузнецов, В.А. Сакович, Н.И. Холод Математическое программирование. - М.: Вышэйшая школа,1994. 2. Исследование операций в экономике: Учеб. пособие для вузов / Н.Ш. Кремер, Б.А. Путко, И.М. Тришин, М.Н. Фридман; Под ред. проф. Н.Ш. Кремера. - М.: Банки и биржи, ЮНИТИ, 1997. 3. Колемаев В.А. Математическая экономика.- М.: Юнити,1998. Приложение program Kurs; uses Crt; const (* ACTIONS CONSTANT *) SELL = 0; SAVE = 1; (* TYPES SIZE CONSTANT *) MAX_VECTOR_SIZE = 64; type TOutMatrixCell = record action : byte; value : real; end; TOutMatrix = record rows : word; cols : word; items : array[1..MAX_VECTOR_SIZE - 1, 0..MAX_VECTOR_SIZE - 1] of TOutMatrixCell; end; TPlanCell = record year : word; action : byte; end; IVector = record size : word; items : array[1..MAX_VECTOR_SIZE - 1] of byte; end; DVector = record size : word; items : array[0..MAX_VECTOR_SIZE - 1] of real; end; var vectorR : DVector; vectorU : DVector; outMatrix : TOutMatrix; optimalPlan : IVector; startTime : word; count : word; {----------------------------------------------------------------------------} procedure ReadData(path : string); var inFile : Text; i : word; elem : real; s : string; begin Assign(inFile, path); Reset(inFile); Writeln('Условие:'); repeat Readln(inFile, s); Writeln(s); until (s = ''); Writeln('Начальные данные:'); Write('R(x) : '); i := 0; while not Eoln(inFile) do be Read(inFile, elem); Write(elem:3:1, ' '); vectorR.items[i] := elem; Inc(i); end; vectorR.size := i; Readln(inFile); Writeln; Write('U(x) : '); i := 0; while not Eof(inFile) do begin Read(inFile, elem); Write(elem:3:1, ' '); vectorU.items[i] := elem; Inc(i); end; vectorU.size := i; Close(inFile); Writeln; Write('начальный возраст оборудования = '); Readln(startTime); Write('расчетный период = '); Readln(count); Writeln; end; {----------------------------------------------------------------------------} procedure WriteData; var i : word; q : array[0..1] of string; begin Writeln('Решение:'); q[0] := 'заменить'; q[1] := 'сохранить'; for i := 1 to optimalPlan.size do Writeln(i, ' year -> ', q[optimalPlan.items[i]]); end; {----------------------------------------------------------------------------} function S(t : word) : real; begin S := 2; end; {----------------------------------------------------------------------------} function P(t : word) : real; begin P := 15; end; {----------------------------------------------------------------------------} function U(t : word) : real; begin U := vectorU.items[t]; end; {----------------------------------------------------------------------------} function R(t : word) : real; begin R := vectorR.items[t]; end; {----------------------------------------------------------------------------} function F(t : word; order: word; var action : byte) : real; var a : real; b : real; begin if (order = 1) then begin a := R(t) - U(t); b := S(t) - P(t) + R(0) - U(0); if (b >= a) then begin F := b; action := SELL; end else begin F := a; action := SAVE; end; exit; end; a := R(T) - U(T) + outMatrix.items[order - 1, t + 1].value; b := S(T) - P(T) + R(0) - U(0) + outMatrix.items[order - 1, 1].value; if (b >= a) then begin F := b; action := SELL; end else begin F := a; action := SAVE; end; end; {----------------------------------------------------------------------------} procedure BuildOutMatrix; var i : word; j : word; action : byte; begin outMatrix.rows := vectorR.size - 1; outMatrix.cols := vectorR.size; for i := 1 to outMatrix.rows do for j := 0 to outMatrix.cols do begin outMatrix.items[i, j].value := F(j, i, action); outMatrix.items[i, j].action := action; end; end; {----------------------------------------------------------------------------} procedure GetOptimalPlan(startTime : word; count : byte); var i : word; currTime : word; begin currTime := startTime; optimalPlan.size := count; for i := count downto 1 do begin optimalPlan.items[count - i + 1] := outMatrix.items[i, currTime].action; if (outMatrix.items[i, currTime].action = SELL) then currTime := 1 else Inc(currTime); end; end; {----------------------------------------------------------------------------} begin ClrScr; ReadData('data.txt'); BuildOutMatrix; GetOptimalPlan(startTime, count); WriteData; Readln; end.
Страницы: 1, 2, 3
|