Смекни!
smekni.com

Реализация на ЭВМ решения задачи оптимальной политики замены оборудования (стр. 4 из 4)

Запишем функциональные уравнения для последнего года планового периода 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.