Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Управление корпоративными программами информационные системы и математические модели - Гламаздин Е.С., Новиков Д.А., Цве

.pdf
Скачиваний:
52
Добавлен:
24.05.2014
Размер:
785.08 Кб
Скачать

x : 0 ≤ x ≤ max xij , и рассмотрим задачу максимизации функ-

 

0≤ jN (i)

 

 

m ~

(xi ) при ограничениях

m

0 ≤ xi ≤ max xij ,

ции å fi

å xi K ,

i=1

 

i=1

0≤ jN (i)

i = 1, ..., m.

~

Заметим, что функции fi (x) вогнуты и кусочно-линейны.

~

Выбираем проект с номером i1, для которого функция fi1 (x) имеет наибольший наклон первого звена ломаной графика.

 

Вкладываем в проект i1 величину средств a1

= min[xi , K] , где

 

~

1

xi

 

первая точка излома функции fi (x) .

 

1

1

 

 

Если a1 < K, то оптимальное распределение средств найдено.

~

Если a1 > K, то рассмотрим новую задачу с K = K – a1, где

~

 

fi

(x) = fi (a1 + x) , а остальные функции остаются прежними.

1

1

 

Выбор проекта и величины вложения в него осуществляются аналогично и т.д.

Алгоритм завершает свою работу либо после исчерпания ка- питала K, либо после того, как вложение по каждому проекту i

достигнет максимальной величины

max xij .

 

 

 

 

 

 

0≤ jN (i)

 

 

Если найденное решение

x0 ,i = 1,...,m

удовлетворяет усло-

~

 

 

i

 

 

 

0

0

то

решение

0

,i = 1,...,m будет

вию fi

(xi ) =

fi (xi ), i = 1,...,m ,

xi

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

Для данного решения необходимо проверить условие неотри- цательности баланса счета заказчика решить задачу нижнего уровня (алгоритм решения задачи нижнего уровня приведен ниже в подразделе 2.7).

Предположим, что при некотором i1 выполнено строгое нера-

~

 

0

) >

fi

0

) ,

и

0

принадлежит минимальному от-

венство fi

(xi

(xi

xi

 

1

 

1

 

1

1

 

 

1

 

резку [xi1 , xi2

], где xi1 , xi2

X i

. Тогда исходная задача разбивает-

1

1

 

 

 

1

1

 

1

 

 

ся на две подзадачи с измененными ограничениями по проекту i1:

121

0 £ x

£ x1

в первой подзадаче и x2

£ x

i

£

max x

i

j

во второй.

i

i

i

 

 

jN (i1 )

 

1

1

1

 

1

0

1

 

 

 

 

 

 

 

 

 

 

Каждая из подзадач решается указанным выше способом и так далее. Если текущее решение подзадачи удовлетворяет условию

~

0

) =

0

),i =1,...,m , то оценка снизу для максимума целевой

fi

(xi

fi (xi

функции возрастает.

Для реализации данного алгоритма введем следующие обо- значения.

Пусть заданы

матрицы

R = {rt }Î Rm×max( N (i))×n+1

и

 

 

 

ij

 

C = {ct

}Î Rm×max( N (i))×n+1

, где m

количество инвестиционных

ij

 

 

 

 

проектов, N(i) – количество вариантов реализации для каждого проекта, T срок реализации каждого варианта.

Элементы rijt матрицы R определяют величины возвратов для варианта j по проекту i в момент времени t = 0, …, T.

Элементы cijt матрицы C определяют величины затрат для ва- рианта j по проекту i в момент времени t = 0, …, T.

Матрицы R = {rt }Î Rm×max( N (i))×n+1

и C = {ct }Î Rm×max( N (i))×n+1

 

 

ij

 

ij

 

определяют элементы

матриц

X = {x }Î Rm×max( N (i))

и

 

 

 

 

ij

 

F = { f

ij

}Î Rm×max( N (i)) , где

x минимальная величина средств,

 

 

ij

 

 

необходимых для реализации варианта j по проекту i, fij значе-

ние приведенной стоимости проекта i в случае выбора варианта j. Матрицы X и F определяют значения кусочно-постоянной

ì

0, 0 £ x < xi1

ï

 

 

 

функции fi(x): fi (x) = í fij , xij £ x < xij+1, j = 1,..., N (i) -1.

ï f

iN (i)

, x ³ x

î

 

iN (i)

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

~

(x) , для которой

~

(x) ³ fi (x) при "x : 0

£ x £ max xij .

fi

fi

 

 

 

 

0≤ jN (i)

122

Обозначим S = {sij } матрица, элементы которой определя-

ют точки излома функции

~

(x) . Элементы матрицы

fi

вычисляются следующим образом.

 

Обозначим

T = {t } Rm×max(N (i)) ,

 

fij

 

 

ij

tij =

, i = 1,...,m; j = 1,..., N (i)

тангенсы угла наклона

 

 

xij

 

 

S = {sij }

где

прямой,

проходящей

через

начало координат и точку

с

координатами

(xij , fij ) точку разрыва функции fi(x).

 

 

 

 

 

 

 

 

 

Обозначим

 

j1

позиция максимального элемента строки i

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

матрицы

T.

Зафиксируем первый

 

столбец

матрицы

S:

s

 

= j1

,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i1

i

 

i = 1, …, m. Переместим

 

начало координат

в точку

(xiji1 , fiji1 ) и

осуществим перерасчет элементов матрицы T:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

fij f

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

t

1

=

 

 

 

iji

, i = 1,...,m.; j = j1

+1,..., N (i) .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ijji

 

 

xij xiji1

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Обозначим

 

j2

позиция максимального элемента строки i

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

матрицы

T.

Зафиксируем второй

столбец

матрицы

S:

s

 

= j2

,

i = 1, …, m,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

i2

i

 

и

т.д.

Результатом

вычислений

является

 

 

матри-

ца S = {sij }.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Обозначим N’(i) –

число итераций для строки i матрицы

S = {sij }

число элементов в строке i матрицы

S. Обозначим

X ' = {x'

ij

} Rm×max( N '(i))

 

и F' = { f '

ij

} Rm×max( N '(i)) ,

где x'

ij

= x

,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

isij

 

f 'ij = fisij

, i = 1, …, m и j = 1, …, N’(i).

 

 

 

 

 

 

 

 

 

Таким

образом,

 

 

матрицы

 

X ' = {x'ij } Rm×max( N '(i))

и

F' = { f 'ij } Rm×max( N '(i))

 

 

 

 

 

~

 

 

 

 

 

 

 

 

 

определяют функции fi (x) :

 

 

 

 

 

 

123

 

ì f 'ij+1- f 'ij

× x + f 'ij , x'ij £ x £ x'ij+1

, j = 1,...,

 

ï

 

 

 

 

 

 

x'

 

 

-x'

 

~

ï

 

ij+1

 

ij

 

 

ï f '

i1

 

 

 

 

 

fi

(x) = í

 

× x,0 £ x £ x'i1

 

x'

 

 

 

ï

 

 

 

 

 

 

 

i1

 

 

 

 

 

ï f 'iN '(i) , x ³ x'iN '(i)

 

 

ï

 

 

 

 

 

 

 

 

î

 

 

 

 

 

 

 

Определим

матрицу T ' = {t'ij } Rm×max( N '(i)) ,

~

щую углы наклона звеньев графика функции fi (x) :

N'(i) -1

.

характеризую-

ì f '

ij+1

- f '

ij

,i = 1,...,m; j = 1,..., N '(i) -1

 

ï

 

 

 

 

 

 

 

 

ï x'ij+1

-x'ij

.

t'ij = í

 

 

 

 

ï0,i = 1,...,m; j = N '(i),..., max(N '(i)) -1; N' (i) < max(N'(i)) -1

 

ï

 

 

 

 

 

 

ï

 

 

 

 

 

 

î

 

 

 

 

 

 

Матрица T ' = {t'ij } Rm×max( N '(i)) определяет тангенсы углов

~

(x) . При этом в строке i элемент

наклона для графиков функций fi

j матрицы T’ определяет тангенс угла наклона для звена j графика

 

~

 

 

 

 

функции fi (x) .

 

 

 

 

 

Определим векторы X 0 = {x0

} и

F0 = { f 0}, i = 1, ..., m,

где

 

i

 

i

 

 

x0

определяет общую величину инвестиций в проект i после каж-

i

 

 

 

 

 

дой итерации алгоритма решения задачи верхнего уровня,

fi

0

определяет отдачу от проекта i при инвестициях в размере xi0 .

Начальные условия: xi0 = 0 , fi0 = 0 , i = 1, ... , m.

На первой итерации алгоритма определяем позицию макси- мального элемента в первом столбце матрицы T ' = {t'ij }. Обозна- чим i1 номер строки, в которой находится максимальный элемент,

~

i1 номер проекта, для которого функция fi (x) имеет наиболь-

124

ший наклон первого звена ломаной графика, x'i11 первая точка

~

излома функции fi (x) .

Обозначим C = {ci},i =1,...,m вектор, элементом которого

является номер рассматриваемого варианта для проекта i (номер варианта определяется в терминах матрицы X’ не совпадает с номерами вариантов для матрицы X: для перехода к номерам вари-

антов в исходных терминах задачи необходимо использовать матрицу S = {sij }).

На каждой итерации алгоритма индексируется номер варианта для соответствующего проекта i1. На первой итерации

ci

= 1, ci = 0, i ¹ i1 .

Вкладываем в проект i1 величину

средств

1

 

 

 

 

 

 

 

 

 

 

 

 

a = min[x'

i

1

, K] ,

x0

= x0

+ a инвестиции в проект i1

увеличе-

1

 

 

i

 

 

i

 

1

 

 

ны на a1.

1

 

 

1

 

 

1

 

 

 

 

 

 

 

 

f 0

 

 

 

 

 

 

Если a

 

< K , то

=

f '

i 1

фиксируем увеличение отдачи от

 

1

 

 

 

i

1

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

инвестиций и производим новую итерацию алгоритма с изменен-

ными

начальными

условиями:

K = K - a1

(уменьшаем

размер

свободного

капитала),

t'i1 j = t'i1 j+1 ,

j = 1,..., N '(i1) -1,

x'i1 j = x'i1 j+1-a1 ,

j =1,..., N '(i1) -1,

f 'i1 j = f 'i1 j +1 ,

j =1,..., N '(i1) -1,

(сдвигаем график

функции

~

fi (x) :

~

~

+ x) ),

N '(i1) = N '(i1) -1 (уменьшаем количество

fi (x) = fi (a1

1

1

 

 

 

 

 

рассматриваемых вариантов по проекту i1).

Если a1 = K , то определено текущее распределение средств

X 0 = {x0

}; отдача от инвестиций

F0 = { f 0

}; вектор

i

 

i

 

C = {ci}, i = 1,...,m .

Необходимо проверить, удовлетворяет ли распределение сле-

дующему условию:

~

0

0

 

fi (xi ) = fi (xi ) при всех i = 1, ..., m.

 

 

 

~

(x) следует, что равенство

Из определения функций fi(x) и fi

выполняется тогда

и

только

тогда,

когда элементы вектора

125

X 0 = {xi0} совпадают с точками разрыва функции fi(x) – элемента-

ми

строк

матрицы

X ' = {x'ij }Î Rm×max( N '(i)) . Таким образом,

~

 

0

0

 

0

= x'ici i = 1,...,m .

fi

(xi ) = fi (xi ) xi

 

 

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

 

 

1) Если

x0

= x'

ici

i = 1,...,m , то найдено текущее решение

 

 

 

i

 

 

задачи нижнего уровня:

X 0 = {xi0}, i = 1, ..., m – распределение инвестиций; F0 = { fi0}, i = 1, ..., m – отдача от инвестиций;

m

S= å fi0 суммарная отдача от инвестиций целевая функ-

i=1

ция задачи;

J = { j1*,..., jm* } номера вариантов, реализуемых по проекту

i, где ji* = sici .

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

2) Если

x0 ¹ x'

ici

при i = i

2

, то распределение X

0 = {x0} не

 

i

 

 

 

 

 

 

 

 

i

является текущим решением задачи нижнего уровня.

 

 

Определим минимальный отрезок [x1, x2 ], которому принад-

лежит точка x0 , где x1, x2 точки разрыва функции f

i2

(x) .

 

i2

 

 

 

 

 

 

 

 

 

 

Точки

разрыва функции

 

fi2 (x)

 

определяются

матрицей

X = {x }Î Rm×max( N (i)) ,

следовательно

x1, x2 совпадают с соответ-

ij

 

 

 

 

 

 

 

 

 

 

 

 

ствующими элементами строки i2 матрицы X.

 

 

 

Пусть x1 = x

, x2

= x

,

где x

, x

элементы матри-

 

i2 j1

 

 

i2 j+1

 

 

i2

j1

i2 j +1

 

 

 

цы X. Тогда исходная задача разбивается на две подзадачи с изме-

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

Левая ветвь:

N (i2 ) = j1

(уменьшаем количество рассматри-

ваемых вариантов

 

по

проекту

 

i2). Значения

элементов матриц

126

X = {xij} и F = { fij} остаются прежними для i = 1, ..., m, j = 1,..., N (i) (с учетом изменения количества вариантов по проек-

ту i2).

 

 

 

xi2 j

= xi2 j+ j1 +1 ,

j = 1,..., N (i) − j1 −1,

Правая

ветвь:

fi2 j = fi2 j+ j1 +1 , j = 1,..., N (i) − j1 −1,

(сдвигаем графики функций

~

fi2

(x) ),

K = K xi2 j+ j1 +1 ,

0

= xi2 j+ j1 +1 (вкладываем в

fi2 (x) и

xi2

проект i2

величину средств xi2 j+ j1 +1 : считаем выбор данного проек-

та приоритетным в начальный момент).

 

S = {sij },

Для

каждой

ветви

производится расчет матриц

X ' = {x'ij } Rm×max( N '(i))

и F' = { f 'ij } Rm×max( N '(i)) , определяющих

соответствующие

функции

~

и

вычисляются

вектора

fi (x) ,

X 0 = {x0

} и

F0 = { f 0} (при этом для правой ветви элемент i

2

i

 

 

i

 

 

 

 

 

вектора X 0 = {xi0}ненулевой).

Расчеты данных величин производятся аналогично вышеопи- санному алгоритму.

В случае если для распределения подзадачи не выполняется условие xi0 = x'ici , i = 1,...,m , то происходит дальнейшее ветвле-

ние подзадачи.

Результатом ветвления является дерево, в листьях которого будут определены текущие решения (X 0 ,F 0 ,S, J * ) каждой подза-

дачи, для которых проверяется существование решения задачи нижнего уровня.

Построение дерева и выбор оптимального решения, на кото- ром достигается максимум целевой функции, осуществляется рекурсивно.

2.7. Алгоритм решения задачи нижнего уровня. Текущим решением задачи верхнего уровня является набор проектов (с соответствующим выбором подрядчиков), реализация которых возможна при ограничении на общий объем инвестиций K = PVG+.

127

Для выбранного набора проектов необходимо определить воз-

можность их реализации при ограничениях на состояние счета заказчика.

Условие неотрицательности баланса счета заказчика форму- лируется следующим образом:

 

 

 

t

m t

 

 

 

 

t = 0,...,T

å gk vk

+ å å(rt* - ct * )vk ³ 0 ,

 

 

 

 

k =0

iji

iji

 

 

 

 

i=1 k =0

 

 

t

 

 

 

 

 

 

где ågk vk

приведенная величина кредитного потока на момент

k =0

 

 

 

 

 

 

времени t,

m t

 

 

 

 

å å(rt* - ct * )vk суммарный баланс по всем проек-

 

 

iji

iji

 

 

 

 

 

i=1 k =0

 

 

 

 

там на момент времени t.

 

 

 

Текущее решение задачи верхнего уровня определяет сле-

дующие

параметры:

X 0 = {x0

}, i = 1, ..., m

вектор,

элементы

 

 

 

i

 

 

проект i;

которого

определяют

распределение инвестиций в

F0 = { fi0}, i = 1, ..., m вектор, элементы которого определяют

m

отдачу от инвестиций по проекту i; S = å fi0 суммарная отдача

i=1

от инвестиций целевая функция задачи, J * = { j1*,..., jm* } номера вариантов, реализуемых по проекту i (в случае, если по проекту i выбран вариант с номером, j > ji* Î J * , а для остальных проектов

номера вариантов принадлежат J * , то реализация такого набора проектов невозможна при заданных ограничениях на объем инве- стиций).

Если для решения (X 0 ,F 0 ,S, J * ) выполняется условие неот-

рицательности баланса счета заказчика, то данное решение являет-

ся решением задачи нижнего уровня и происходит возврат на верхний уровень.

Заметим, что решение, характеристики которого заданы век-

тором J '= {j' ,..., j'

m

}, где

j'

i

£ j*

при i = 1,...,n , также удовле-

1

 

 

i

 

творяет ограничениям на общий объем инвестиций, так как эле- менты соответствующего вектора X '= {x'i }, i = 1,...,m не

128

превосходят элементы вектора X 0 = {xi0}, i = 1, ..., m, а элементы

вектора F' = { f 'i } не превосходят элементы вектора F0 = { fi0}. Таким образом, текущее решение задачи верхнего уровня

(X 0 ,F 0 ,S, J * )

определяет множество D допустимых решений при

ограничении на общий объем инвестиций, причем

решение

(X 0 ,F 0 ,S, J * )

является на множестве D «наилучшим»,

так как

сумма S является на данном множестве максимальной.

В случае, если текущее решение задачи нижнего уровня (X 0 ,F 0 ,S, J * ) не удовлетворяет ограничениям на состояние счета заказчика, необходимо решить задачу нижнего уровня, т.е. опреде- лить «наилучшее» решение(X ', F', S, J ' ) D , на котором выпол-

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

Решение (X ', F', S, J ' ) D будет являться решением соот-

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

Задача нижнего уровня решается следующим образом. Вектор J * = {j1*,..., jm* } определяет фиксированный набор вариантов, из которых осуществляется выборка решения (X ', F', S, J ' ) D

задачи нижнего уровня.

В соответствии с начальными условиями заданы матрицы X = {xij} Rm×max( N (i)) и F = { fij} Rm×max( N (i)) . Элементам строки i данных матриц соответствуют точки разрыва кусочно- постоянной функции fi(x).

Так как функции fi(x) являются неубывающими, то элементы строк матрицы F = { fij} Rm×max( N (i)) упорядочены по возраста- нию.

Обозначим N ' (i) , i = 1,...,m количество вариантов реализа- ции, которые не были отброшены для проекта i на верхнем уровне:

129

N ' (i) = j* . Тогда решение задачи верхнего уровня (X 0

,F 0

,S, J * )

 

 

i

 

 

 

 

определяет выборку элементов матрицы X = {x }Î Rm´max( N (i))

и

 

 

 

ij

 

 

 

F = { f

ij

}Î Rm´max( N (i))

при i = 1,...,m ; j = 1,..., N '(i) ,

где

x

 

 

 

 

ij

 

величина инвестиций в проект i в случае выбора варианта реали- зации с номером j; fij значение приведенной стоимости проекта i (отдача от инвестиций) в случае выбора варианта j.

Обозначим J1 = { j1}, где

j1

= j* -1 ( i = 1,...,m ): вектор,

i

i

i

компоненты которого определяют величину инвестиций и отдачу от инвестиций в проект i в случае выбора варианта с номером

j* -1.

 

 

i

 

 

Введем вспомогательный вектор

J 2 = { j2 ) , i = 1,...,m . На-

 

 

i

чальные условия: J 2 = { j2

} = 0. Обозначим S1 = {s1}, i = 1,...,m

i

 

i

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

номером

j1 ,

а по остальным проектам выбираются варианты с

 

 

 

i

 

 

 

 

 

 

 

 

номерами

jk* :

S1 = {si1}, i = 1,...,m , где si1 =

å fkN ' (k ) + fiN ' (i) .

 

 

 

 

 

 

 

 

 

 

 

1£k £m,k ¹i

 

 

Пусть Smax

максимальная суммарная отдача от инвестиций,

S

 

= max s 1

,

при этом i

= (i

 

s1 = S

 

)

номер проекта, при

 

 

 

 

max

1£i£m i

 

1

 

 

i

max

 

 

 

 

 

 

 

 

котором достигается максимальное значение si1 . Определим:

X ' = {x'},

где

x'

= x0

при

i = 1,...,m,i ¹ i ,

x'

= x

'

(i )-1

,

i

 

i

i

 

 

1

i1

i N

 

 

 

 

 

 

 

 

 

 

1

1

 

F' = { f '},

где

f '

= f 0

при

i = 1,...,m,i ¹ i ,

f '

= f

'

(i )-1

,

i

 

i

i

 

 

1

i1

 

i N

 

 

 

 

 

 

 

 

 

 

1

1

 

m

 

 

 

 

 

 

 

 

 

 

 

S' = å fi' , S' = Smax ,

J ' = { j'i }, где

j'i = N'(i1) -1.

 

 

 

 

 

i=1

 

 

 

 

 

1

 

 

 

 

 

 

 

(X ',F',S', J ')

 

 

 

 

 

 

Тогда

решение

является «наилучшим» на

множестве D за исключением решения (X 0 ,F 0 ,S, J * ) .

Проверим выполнение условия неотрицательности баланса счета заказчика для решения (X ',F',S', J ') : t = 0,...,n

130

Соседние файлы в предмете Экономика