Смекни!
smekni.com

Анализ и прогнозирование развития российского рынка газа (стр. 18 из 20)

СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ:

1. Баранов В.Н. «Независимые производители и перспективы развития газовой отрасли России».

2. Сборник докладов и выступлений « Развитие российского рынка газа: ценообразование и перспективы биржевой торговли»

3. Язев В. «Природный газ».

4. Ермолов О.В., Миловидов К.Н., Чугунов Л.C., Ремизов Л.С. «Стратегия развития нефтегазовых компаний» 1998 г

5. www.gasforum.ru

6. Авдокуши Е.Ф. «Международные экономические отношения» 1999 г.

7. Киреев А. «Международная экономика: движение товара и факторы производства» Часть первая 2000 г.

8. Журнал «Газовый бизнес» январь-феврель 2006г.

9. Офицеров вл., Судзиловский Н.Б. Об одном типе задач линейного программирования и их решении // Известия АН СССР. Техническая кибернетика. - 1981. - N2 6. - С. 14-17.

10. Офицеров вл., Смирнов с.в. Моделирование и оптимизация снабженческой деятельности для крупных компаний // Проблемы управления и моделирования в сложных системах: Труды V международной конф. (Самара, июнь 2003). - Самара: Самарский НЦ РАН, 2003. - С. 197-205.

11. Беллман Р., Дрейфус С. Прикладные задачи динамического программирования. - М.: Наука, 1965. - С. 98.


ПРИЛОЖЕНИЕ

Листинг программы для оптимизация инвестиций в месторождения на языке программирования VBA

Option Explicit ' Все переменные должны описываться

Option Base 1 'Индексы всех массивов начинаются с 1

Туре Mestorozhdenie :Далее будет определен массив этого типа

Name As String 'Имя месторождения

KolVart As lnteger 'Колич вариантов инвестирования

Lnv() As DoubIe 'Будет определен массив вариантов вложений

Dob() As ОоиЫе 'Будет определен массив объемов добычи

End Туре

Туре АО 'Далее будет определен массив этого типа

NameDAO As String 'ИмяДАО

KolMestor As Integer 'Количество MecTopo)jCДвДАО

MestorO As Mestorozhdenie 'БудегопределенмассивместорождДАО

End Туре

Туре DAO_dob 'Далее будет определен массив этого типа

Name As String 'ИмяДАО

Invest As ОоиЫе 'ИнвестициивДАО

Dob As ОоиЫе 'ДобычаДАО

End Туре

Туре Maxl

FMAX As ОоиЫе 'Значение функционалана ресурсу, размер массива = числу эффективных вариантов ресурса FNameDAO As String 'Имя ДАО

FNameMestor As String 'Имя месторождения

Flnv As ОоиЫе 'Будет определено вложение средств

FDob As ОоиЫе 'Будет определен объем соответствующей добычи

F _i_INV As Long 'Будет определен индекс инвестирования

End Туре

Туре Мах2

FMAX As ОоиЫе Значение функционалана ресурсе, размер массива = числу эффективных вариантов ресурса FNameDAO As String 'Имя ДАО

NmMestor As String Имя месторождения, дающего последнее приращение

FNameMestorOAsString 'Имя месторождения

Flnv As DoubIe 'Будет определено вложение средств

FDob As ОоиЫе 'Будет определен объем соответствующей добычи

F _UNV As Long 'Будет определен индекс инвестирования

End Туре

Описание глобальных переменных, видимых во всех процедурах модуля

Dim DataВook As String 'Переменная для запоминария имени книги с данными

Dim ProgramBook As String 'Переменная для запоминария имени книги

Dim ResultBook As String 'Переменная для запоминария имени книги с результатами

Dim Row, Column As Integer 'Переменные для сохранения текущего номера ячейки

Dim Sredstva As ОоиЫе 'Общие максимальные средства на добычу

Dim Delta As ОоиЫе 'Интервал приращения средств

Dim PumeftSheet As String 'Переменная для имени листа Пурнефтегаз

Dim SahalinmorSheet As String 'Переменная для имени листа Сахалинморнефтегаз

DimKrasnodarSheetAsString 'Переменная для имени листа Краснодарнефтегаз

DimStavropSheetAsString 'Переменная для листа Ставропольнефтегаз

Dim DagneftSheet As String 'Переменная для ли:;та Дагнефтегаз

Dim TermneftSheet As String 'Переменная для листа Термнефтегаз

Dim GrozneftSheet As String 'Переменная для листа Грознефтегаз

Dim N_DAO As Integer 'ЧислоДАО

Dim ОАОО As АО 'Определили динамич массив структур ДАО, месторождений, вариантов инв

Sub General() 'Управляющая процедура

Dim FМAXlO As Maxl 'Определили структуру соотв. найденному макс Фун*,ла для одной перем. Dim FMAX20 As ОоиЫе 'Определили рабочее соотв. найденному макс функ-ла .

Dim FMAX30 As Maxl

Dim FMAX40 As Мах2 'Определили соотв. найденному макс функ-ла .

Dim Tst_MAX, Tst_MIN As ОоиЫе 'Переменые для тестирования максимума и минимума

Dim i_DAO, ii_DAO, i_Mestor, ii_Mestor, i_tstMestor, i_ Vart, ii_ Vart, i, fflag, fflagl As Integer 'Индексыдляпросмотра

Dim N_INV, M_INV As Long 'Максимальное число приращений (для всех в сумме и для одного максимального)

Dim S_INV As Long 'Минимальное значение инвестирования (в вариаmах)

Dim N_Fact_INV, ii_Fact_INV, i_Fact_INV As Long 'Фактическое число вариантов инвестирования

Dimi_INV, nn_Fact_INV, ii_INVAsLong 'значение текущею номера вариаmа инвестирования Dimj_in_i1NVAsLong 'З,начение текущего номера варианта инвестирования в рамках i

Dim V _i_INV As Double 'Значение текущего варианта инвестирования

Dim V j_in_iINV As Double 'значение текущего варианта инвестирования

Dim N_Mestor As Integer 'Число месторождений (текущее рабочее опред:ление)

Dim Flg As Integer 'флаг для определиния было ли изменене максимума

Dim Мах_Мах As Double 'абсолютный максимум

DataBook = ""

ProgramВook = ''''

ResultBook = ""

'Начало работы, процедура открытия файла с исходными данными

'1)

Сall OpenDataFile

'Определяем отказ от работы

If DataBook = "" Then

Exit Sub

End If

Выдаем информацию в строке состояния

Application,StatusBar = "Создаются массивы с данными"

Вводим исходные данные

Саll GetData

Определяем максимальный объем инвестирования

Sredstva = О

Tst_MIN = 999999999999#

Мах_Мах = О 'сейчас для поиска максимального варианта инвестирования

Fоr i_DAO = 1 То N_DAO

Fоr i_Mestor = 1 ТоDАО(i_DАо).коlМеstог

Выбор максимального варианта инвестирования среди текущих вариamов

Tst_MAX=O

Рот i_ Vart = 1 То DAO(i_DAO),Mestor(i_Mestor).KoIVart

IfTst_MAX < DAO(i_DAO).Mestor(i_Mestor).Inv(i_ Vart) Then

Tst_MAX = DAO(i_DAO).Mestor(i_Mestor).Inv(i_ Vart) End If

'Выбор максимального варианта инвестирования среди всех

IfMax_Max < DAO(i_DAO).Mestor(i_Mestor).Inv(i_ Vart) Then

Мах_Мах = DAO(i_DAO).Mestor(i_Mestor).Inv(i_ Vart) End If

'Выборнач. значдляинвестирования

IfTst_MIN > DAO(i_DAO).Mestor(i_Mestor).Inv(i_ Vart) Then

Tst_MIN = DАО(i_DАО).Меstш(i_Меstог).Iпv(i_ Vart)

End If

Next i_ Vart

Sredstva = Sredstva + Tst_MAX Next i_Mestor

Nexti_DAO

'Начальное значение инвестирования V _i_INV = Tst_MIN

Tst_ MIN = 99999999999999#

'Выбор вариаmа DEL ТА для полного оптимума

Fог i_DAO = 1 То N_DAO

Fог i_Mestor = 1 То DAO(i_DAO).KoIMestor

Fот i_ Vart = 1 То DАО(i_DАО).Меstог(i_Меstог).коIVагt Рот ii_DAO = i_DAO То N_DAO

Fот ii_Mestor = 1 То DAO(ii_DAO).KoIMestor

Рот ii_ Vart = 1 То DАО(ii_DАО).Меstог(ii_Меstог).коIVагt

'Выборвариантаприращенияинвестирования

If Abs(DAO(i_DAO).Mestor(i_Mestor).Inv(i_ Vart) - DAO(ii_DAO).Mestor(ii_Mestor).Inv(ii_ Vart» <> О Then

IfTst_MIN>Abs(DAO(i_DAO).Mestor(i_Mestor).Inv(i_Vart)DAO(ii_DAO.Mestor(ii_Mestor).Inv(ii_ Vart» Then

Tst_MIN = Abs(DAO(i_DAO).Mestor(i_Mestor).Inv(i_Vart)-DAO(ii_DAO).Mestor(ii_Mestor).Inv(ii_ Vart»

End If

End If

Next ii_ Vart

Next ii_Mestor

Nextii DAO

Next i_ Vart

Next i_Mestor

Nexti_DAO

**************************************************

Заполнение для 'всевозможных вариантов инвестирования

Вычисление общего числа месторождений

N _ Mestor = О 'нач знач общего числа местор.

For i_DAO = 1 То N_DAO

N_Mestor = N_Mestor + DAO(i_DAO).KoIMestor

Next i_DAO

Delta = Tst_MIN

Flg=O

M_INV = Iпt(Мах_Мах / Delta) + 1 'Число приращений для максимального варианта

Tst_ МАХ = О 'нач знач про верки на максимум

Выдаем иформацию в строкеl состояния

Application.StatusBar = "Идет процесс оптимизации"

Определение начальных и конечных индексов в вариантах инвестирования

N_Fact_INV = О 'Начальное число вариантов инвестирования

N_INV = Int(Sredstva / Delta) + 1

S_INV = Int(Tst_MIN / Delta)

IfS_INV = О Then

S_INV = 1

EndIf

М _ INV = Int(Max _Мах / Delta) + 1 'Число приращений для максимального варианта

For i_INV = S_INV То M_1NV

Текущий объем инвестирования

V _i_INV = Delta * i_INV

For i_DAO = 1 То N_DAO

For i_Mestor = 1 То DАО(i_DАо).коlМеstог

For i_ Vart = 1 То DАО(i_DАО).Меstоr(i_Меstог).коlVагt

Проверка хватает ли текущего объема инвестирования для добычи

IfV _i_INV >= DAO(i_DAO).Mestor(i_Mestor).Inv(i_ Vart) Then

Проверка включения данных по месторождению

fflag = О

For i = 1 То N]act_INV

IfDAO(i_DAO).Mestor(i_Mestor).Name = FMAX1(i).FNameMestor_

And DAO(i_DAO).Mestor(i_Mestor).Inv(i_ Vart) = _

FMAX1(i).FInv Then

месторождение уже записано

fflag = 1

Exit For

End If

Next i

If fflag = О Then 'записываем в порядке увеличения объемов инвестирования

N_Fact_INV = N_Fact_INV + 1 'Число вариантов инвестиций в для одного месторож

ReDim Preserve FMAX1(N]act_INV)

FMAX1(N]act_INV).FMAX = DAO(i_DAO).Mestor(i_Mestor).Dob(i_ Vart)

FMAXl (N_Fact_INV).F _i_INV = i_INV

FMAX1(N]act_INV).FDob = DAO(i_DAO).Mestor(i_Mestor).Dob(i_ Vart) FMAXl(N]act_INV).Flnv = DAO(i_DAO).Mestor(i_Mestor).Inv(i_ Vart) FMAXl(N]act_INV).FNameDAO = DAO(i_DAO).NameDAO

FMAXl (N ]act_ INV).FNameMestor = DAO(i_ DAO).Mestor(i_ Mestor).Name End If

End lf

Next i_Vart

Next i_Mestor

Nexti_DAO

Next i_INV

********************************************************

Flg=O

ReDim FMAX2(N_INV - S_INV)

Поиск оптимального решения

Tst_MAX = О 'нач знач про верки на максимум

ReDim FMAX4(!)

ReDim FMAX4(! ).FNameMestor(N _ Mestor)

Мах_Мах=О nn]act_INV = О

Проход по вариантам финансирования одновременно i_Mestor месторождений

For i_INV = S_INV То N_INV

значение текущего номера варианта инвестирования в рамках общего инвестир i_INV

For j_injINV = S_INV То i_INV

Находим FМAX соответствущий текущеI.jY инвестированию j_in_iINV

Ifj_in_iINV <> UNV Then 'Условие обязательно, если (lIВНЫ, то FMAX2(O)!!!

For i_Fact_INV = 1 То N_Fact_INV

Ifj_in_iINV = FMAX1(i]act_INV).F_i_INV Тhеп

Tst_MAX = FMAX1(i]act_INV).FMAX + FMAX2(i_INV - j_in_iINV)

ExitFor

End If

Next i]act_INV

Else 'еслиравны,то

For i]act_INV = 1 То N]act_INV

Ifj_in_iINV = FMAXl (i]act_INV).F _i_INV Тhen

Tst_MAX = FMAX1(i]act_INV).FMAX

Exit For

End If

Next i Fact INV

End If

IfTst_MAX> Мах_Мах + 0.00001 Тhen

Flg = 1 'предполагаем, что месторождение еще не используется в финансировании

Проверка на участие месторождения в двух финансированиях одновременно

Ifj_injINV <> i_INV Тhеп

For i_tstMestor = 1 То nn_Fact_INV

Находим предыдущий индекс объема дающий текущий максимум

IfFMAX4(i_tstMestor).F _i_INV = i_INV - FMAXl(i]act_INV).F _i_INV Тhеп

'Проверяем на совпадение имен среди имен предыдущего индекса

For i_ Vart = 1 То UBoиnd(FMAX4(i_tstМestor).FNameMestor)

IfFMAX4(i_tstMestor).FNameMestor(i_ Vart) = FMAX1(i]act_INV).FNameMestor Тhеп

Попытка улучшить общий результат заменой "старого" варианта

инвестирования в месторождение с этим именем, новым вариантом

If Tst_MAX - FMAX4(i_ Vart).FDob <= Мах_Мах + 0.0001 Тhеп

Flg = О 'месторождение уже используется в финансировании

Tst_MAX = Мах_Мах

fflagl = О

ExitFor

Else 'Попытка замены варианта инвест. в месторождение на этом объеме общих инвестиций Tst_MAX = TsCMAX - FMAX4(i_ Vart).FDob