Uploaded by Екатерина Ларионова

kursach

advertisement
МИНОБРНАУКИ РОССИИ
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ
ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
«ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)
Кафедра Информационных систем
КУРСОВАЯ РАБОТА
по дисциплине «Теория принятия решений»
ТЕМА: ПРИМЕНЕНИЕ МЕТОДОВ ЛИНЕЙНОГО И ДИНАМИЧЕСКОГО
ПРОГРАММИРОВАНИЯ ДЛЯ РЕШЕНИЯ ПРАКТИЧЕСКИХ ЗАДАЧ (ПО ВАРИАНТАМ )
ВАРИАНТ: 18
Студентка гр. 6373
Хетеева М.Р.
Преподаватель
Понамарев А.В.
Санкт-Петербург
2019
ЗАДАНИЕ
НА КУРСОВУЮ РАБОТУ
Студентка Хетеева М.Р.
Группа 6373
Тема работы: ПРИМЕНЕНИЕ МЕТОДОВ ЛИНЕЙНОГО И ДИНАМИЧЕСКОГО
ПРОГРАММИРОВАНИЯ
ДЛЯ
РЕШЕНИЯ
ПРАКТИЧЕСКИХ
ЗАДАЧ
(ПО
ВАРИАНТАМ )
Исходные данные:
Текст индивидуального задания на курсовую работу в соответствии с
назначенным вариантом (см. https://avponomarev.bitbucket.io/tasks/18.pdf).
Содержание пояснительной записки: «Содержание», «Введение»,
«Задача о магистрали», «Задача об оборудовании», «Задача об акциях»,
«Заключение», «Список использованных источников».
Преолагаемый объем пояснительной записки:
Не менее 15 страниц.
Дата выдачи задания:
Дата сдачи реферата:
Дата защиты реферата:
Студентка
Хетеева М.Р.
Преподаватель
Понамарев А.В.
2
АННОТАЦИЯ
Кратко (в 8-10 строк) указать основное содержание курсового проекта
(курсовой работы), методы исследования (разработки), полученные результаты.
SUMMARY
Briefly (8-10 lines) to describe the main content of the course project, research
methods, and the results.
3
СОДЕРЖАНИЕ
1.
1.1.
Введение
4
Задача
5
Условие
0
1.2.
0
2.
0
2.1.
0
2.2.
0
3.
0
3.1.
0
3.2.
0
Заключение
0
Список использованных источников
0
Приложение А. Название приложения
0
4
ВВЕДЕНИЕ
Кратко описать цель работы, основные задачи им методы их решения.
5
1. ЗАДАЧА О МАГИСТРАЛИ
1.1. Условие задачи
На строительство магистрали периодически доставляются материалы,
которые со станции железной дороги вначале поступают на 3 промежуточных
склада, а затем непосредственно к 5 объектам магистрали. Два первых склада А1,
А2 имеют ограниченную емкость 60 т, и поступившие на них грузы расходуются
полностью. Cклад А3 с неограниченной емкостью допускает резервирование
грузов от периода к периоду. Транспортные расходы (в условных денежных
единицах — ДЕ) на перевозку одной тонны груза со станции на промежуточные
склады составляют 6, 6, 6 ДЕ, а со складов к объектам В1–В5 представлены в
табл. 1; там же приведены потребности объектов (в тоннах) в течение двух
периодов.
Таблица 1: Транспортные расходы
В1
В2
В3
В4
В5
А1
7
12
10
7
3
А2
1
4
12
9
4
А3
1
10
2
3
10
1-й период
65
10
23
22
15
2-й период
18
23
8
45
9
Рассматривается работа системы в течение двух периодов при условии
доставки на станцию по 140 т груза в каждый из периодов. Требуется
определить план перевозок, обеспечивающий минимум стоимости доставки
грузов для двух периодов. Провести анализ чувствительности плана к
изменению цен перевозок из первого промежуточного склада.
Формализация задачи
1.2.
Данная задача является задачей линейного программирования.
Пусть:
6
x1, x2, x3 - объём на A1, A2, A3 за все периоды
xi(k) - объём поставки на i-й промежуточный склад в k-й период, i = 1..3, k = 1,2.
xij(k) - Перевоз с i склада в j склад в k-й период, i = 1..3, j = 1...5, k = 1,2.
Тогда целевая функция для первого периода:
6x1 + 6x2 + 6x3 + 7x11(1) + 12x12(1) + 10x13(1) + 7x14(1) + 3x15(1) +1x21(1)+
+4x22(1) + 12x23(1) + 9x24(1) + 4x25(1) +1x31(1) + 10x32(1) + 2x33(1) +
3x34(1)++ 10x35(1)  min
Целевая функция для второго периода:
6x1 + 6x2 + 6x3 + 7x11(2) + 12x12(2) + 10x13(2) + 7x14(2) + 3x15(2) +1x21(2) +
+4x22(2) + 12x23(2) + 9x24(2) + 4x25(2) +1x31(2) + 10x32(2) + 2x33(2) + 3x34(2)+
+ 10x35(2)  min
Ограничения для первого периода:
 Ограничения на целесообразность задачи:
xij(1) >= 0 для всех i, j
 Ограничения на поставку:
x1(1) + x2(1) + x3(1) = 140
 Ограничения на потребление:
7x11(1) + 1x21(1) + 1x31(1) = 65
12x12(1) + 4x22(1) + 10x32(1) = 10
10x13(1) + 12x23(1) + 2x33(1) = 23
7x14(1) + 9x24(1) + 3x34(1) = 22
3x15(1) + 4x25(1) + 10x35(1) = 15
 Ограничения на остаток:
x1(1) = x11(1) + x12(1) + x13(1) + x14(1) + x15(1)
x2(1) = x21(1) + x22(1) + x23(1) + x24(1) + x25(1)
x3(1) >= x31(1) + x32(1) + x33(1) + x34(1) + x35(1)
 Ограничения на объём складов:
x1(1) <= 60
7
x2(1) <= 60
Ограничения для второго периода:
 Ограничения на целесообразность задачи:
xij(2) >= 0 для всех i, j
 Ограничения на поставку:
x1(2) + x2(2) + x3(2) = 140
 Ограничения на потребление:
7x11(2) + 1x21(2) + 1x31(2) = 18
12x12(2) + 4x22(2) + 10x32(2) = 23
10x13(2) + 12x23(2) + 2x33(2) = 8
7x14(2) + 9x24(2) + 3x34(2) = 45
3x15(2) + 4x25(2) + 10x35(2) = 9
 Ограничения на остаток:
x1(2) = x11(2) + x12(2) + x13(2) + x14(2) + x15(2)
x2(2) = x21(2) + x22(2) + x23(2) + x24(2) + x25(2)
x3(2) >= x31(2) + x32(2) + x33(2) + x34(2) + x35(2)
 Ограничения на объём складов:
x1(2) <= 60
x2(2) <= 60
1.3. Решение задачи
Данную задачу будем решать в два шага. Первый шаг – нахождение
оптимального решения и проведение анализа чувствительности для первого
периода, второй – то же самое для второго периода. Затем сложим полученные
решения для обоих периодов и получим решение задачи.
Код решения на Python для первого периода:
# для первого периода
from cvxopt import matrix,solvers
8
c = matrix([-6,-6,-6,-7,-12,-10,-7,-3,-1,-4,-12,-9,-4,-1,-10,-2,-3,-10], tc =
'd')
G = matrix([[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1],
[0,0,-1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1]], tc = 'd')
A = matrix ([[1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0],
[0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0],
[0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0],
[0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0],
[0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],
[-1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0],
[0,-1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0]], tc = 'd')
h = matrix([60,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], tc = 'd')
m = matrix([140,65,10,23,22,15,0,0], tc = 'd')
solution = solvers.lp(c, G.T, h, A.T, m, solver = 'glpk')
print('Status:', solution['status'])
print('Objective:', solution['primal objective'])
print('x = \n', solution['x'])
#анализ чувствительности
print('analis rav,', solution['y'])
Результат работы программы:
Status: optimal
Objective: -1989.0
x =
[ 6.00e+01]
[ 5.00e+01]
[ 3.00e+01]
[ 6.00e+01]
[ 0.00e+00]
9
[
[
[
[
[
[
[
[
[
[
[
[
[
0.00e+00]
0.00e+00]
0.00e+00]
5.00e+00]
0.00e+00]
2.30e+01]
2.20e+01]
0.00e+00]
0.00e+00]
1.00e+01]
0.00e+00]
0.00e+00]
1.50e+01]
analis rav, [ 6.00e+00]
[ 1.00e+00]
[ 1.00e+01]
[ 1.20e+01]
[ 9.00e+00]
[ 1.00e+01]
[ 6.00e+00]
[-0.00e+00]
Код программы решения для второго периода:
#для второго периода
from cvxopt import matrix,solvers
c = matrix([-6,-6,-6,-7,-12,-10,-7,-3,-1,-4,-12,-9,-4,-1,-10,-2,-3,-10], tc =
'd')
G = matrix([[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1],
[0,0,-1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1]], tc = 'd')
A = matrix ([[1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0],
[0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0],
[0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0],
10
[0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0],
[0,0,0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],
[-1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0],
[0,-1,0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0]], tc = 'd')
h = matrix([60,60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0], tc = 'd')
m = matrix([140,18,23,8,45,9,0,0], tc = 'd')
solution = solvers.lp(c, G.T, h, A.T, m, solver = 'glpk')
print('Status:', solution['status'])
print('Objective:', solution['primal objective'])
print('x = \n', solution['x'])
#анализ чувствительности
print('analis rav,', solution['y'])
Результат:
Status: optimal
Objective: -1833.0
x =
[ 4.10e+01]
[ 5.30e+01]
[ 4.60e+01]
[ 1.80e+01]
[ 2.30e+01]
[ 0.00e+00]
[ 0.00e+00]
[ 0.00e+00]
[ 0.00e+00]
[ 0.00e+00]
[ 8.00e+00]
[ 4.50e+01]
[ 0.00e+00]
[ 0.00e+00]
[ 0.00e+00]
[ 0.00e+00]
[ 0.00e+00]
[ 9.00e+00]
analis rav, [ 6.00e+00]
[ 7.00e+00]
[ 1.20e+01]
[ 1.20e+01]
[ 9.00e+00]
[ 1.00e+01]
[-0.00e+00]
[-0.00e+00]
Таким образом, мы можем сделать вывод, что
 оптимальным решения нашей задачи является значение 1989+1833 = 3822
ДЕ при опорном плане, равном:
11
Таблица 2 : опорный план оптимального решения.
Коэффициенты 1- Значения
Коэффициенты 2- Значения
ого периода
ого периода
х1(1)
60
х1(2)
41
x2(1)
50
x2(2)
53
x3(1)
30
x3(2)
46
x11(1)
60
x11(2)
18
x12(1)
0
x12(2)
23
x13(1)
0
x13(2)
0
x14(1)
0
x14(2)
0
x15(1)
0
x15(2)
0
x21(1)
5
x21(2)
0
x22(1)
0
x22(2)
0
x23(1)
23
x23(2)
8
x24(1)
22
x24(2)
45
x25(1)
0
x25(2)
0
x31(1)
0
x31(2)
0
x32(1)
10
x32(2)
0
x33(1)
0
X33(2)
0
x34(1)
0
x34(2)
0
x35(1)
15
x35(2)
9
 оптимальное решение изменится на 0+6 = 6 ДЕ при изменении цен
перевозок из первого промежуточного пункта
12
2. ЗАДАЧА ОБ ОБОРУДОВАНИИ
2.1. Условие задачи.
На
рынке
представлено
специализированное
технологическое
оборудование двух марок: М1 и М2. На производственном предприятии в
данный момент используется оборудование марки M1, возраст которого
составляет 2 года. Остаточная стоимость оборудования и годовая стоимость
обслуживания оборудования в зависимости от срока эксплуатации приведены в
табл. 2. Стоимость инструктажа персонала производственной линии при смене
типа оборудования 500 тыс. руб. (в любом случае, независимо от того, был ли
ранее опыт работы с оборудованием соответствующей марки), стоимость нового
оборудования марки M1 — 14000 тыс. руб., а М2 — 11500 тыс. руб. Необходимо
определить оптимальную стратегию замены оборудования на ближайшие 6 лет,
исходя из того, что через 6 лет оборудование будет реализовано по остаточной
стоимости. Определить границы изменения стоимости нового оборудования
марки M1, в которых найденная стратегия остается оптимальной.
Таблица 2: Затраты, связанные с эксплуатацией оборудования
Возраст М1
М2
Остаточная
Обслуживание,
Остаточная
Обслуживание,
стоимость, тыс.руб.
тыс.руб
стоимость, тыс.руб.
тыс.руб
0
-
400
-
600
1
10800
480
8550
720
2
9720
576
7695
936
3
8748
691
5540
1216
4
7000
829
4432
1460
5
5598
995
3545
1752
6
4478
1194
2800
2100
7
3583
1433
2200
2100
13
8
2866
1500
2200
2100
9
2800
1500
2200
2100
10
2800
1500
2200
2100
2.2. Формализация задачи.
Этапы: этапами являются года.
Проигрыш: затраты на эксплуатацию и замену оборудования.
Цель: минимизировать проигрыш.
Управление: u{0; 1; 2}
0 – не менять оборудование.
1 – поменять оборудование на новое M1.
2 – поменять оборудование на новое М2.
Состояние: Si = текущая марка;возраст.
S0 = M1;2.
Проигрыш на i-ом шаге:
Wi (Si;0) = обслуживание(Si ) + Wi+1
Wi (Si;1) = обновление(М1) – остаточная стоимость(Si)+обслуживание(М1)
+ Wi+1
Wi (Si;2) = обновление(М2) – остаточная стоимость(Si)+обслуживание(М2)
+ Wi+1
2.2. Решение задачи.
Код решения задачи на Python:
class NaiveKnapsackSolver:
def __init__(self, mark, years, total):
self.q1 = years
self.q2 = mark
self.p = total
def W(self, stage):
if stage > self.p:
return 0, None
best_w = None
14
best_u = None
for u in [0, 2]:
if u == 0:
self.q1 += 1
wi = -1 * (self.q2 - 2) * m1[self.q1] + (self.q2 - 1) * m1[self.q1]
+ self.W(stage + 1)[0]
print(wi, self.q1, self.q2)
elif u == 1:
oldq1 = self.q1
oldq2 = self.q2
self.q1 = 0
self.q2 = 1
wi = m1[0] + zamena[0] - ostatok[oldq1][oldq2 - 1] + 500*(oldq21) + self.W(stage + 1)[0]
elif u == 2:
oldq1 = self.q1
oldq2 = self.q2
self.q1 = 0
self.q2 = 2
wi = m2[0] + zamena[1] - ostatok[oldq1][oldq2 - 1] - 500*(oldq2
- 2) + self.W(stage + 1)[0]
if stage == self.p:
wi -= ostatok[self.q1][self.q2-1]
if best_w is None or wi < best_w:
best_w = wi
best_u = u
return best_w, best_u
def solve(self):
return self.W(0)
ostatok = [[0, 0], [10800, 8550], [9720, 7695], [8748, 5540], [7000, 4432], [5598,
3545],
[4478, 2800], [3583, 2200], [2866, 2200], [2800, 2200], [2800, 2200]]
m1 = [400, 480, 576, 691, 829, 995, 1194, 1433, 1500, 1500, 1500]
m2 = [600, 720, 936, 1216, 1460, 1752, 2100, 2100, 2100, 2100, 2100]
zamena = [13500, 10500]
myself = NaiveKnapsackSolver(1, 1, 5)
solve = myself.solve()
new_solve = solve
print(solve)
zamena_save = zamena[0]
15
ЗАКЛЮЧЕНИЕ
Кратко подвести итоги, проанализировать соответствие поставленной
цели и полученного результата.
16
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
1. Пономарев А.В. Динамическое программирование с помощью GNU
Octave за 7 простых шагов // Теория принятия решений – тематический сайт.
URL:
http://cais.iias.spb.su/ponomarev/DP_Octave.pdf
(дата
обращения:
15.02.2018).
2. ГОСТ 7.32–2001. Межгосударственный стандарт. Отчет о научноисследовательской работе. Структура и правила оформления. М.: Изд-во
стандартов, 2001.
Ниже представлены примеры библиографического описания, В
КАЧЕСТВЕ НАЗВАНИЯ ИСТОЧНИКА в примерах приводится вариант, в
котором применяется то или иное библиографическое описание.
3. Иванов И. И. Книга одного-трех авторов. М.: Издательство, 2010. 000
с.
4. Книга четырех авторов / И. И. Иванов, П. П. Петров, С. С. Сидоров, В.
В. Васильев. СПб.: Издательство, 2010. 000 с.
5. Книга пяти и более авторов / И. И. Иванов, П. П. Петров, С. С. Сидоров
и др.. СПб.: Издательство, 2010. 000 с.
6. Описание книги под редакцией / под ред. И.И. Иванова СПб.,
Издательство, 2010. 000 с.
7. Иванов И.И. Описание учебного пособия и текста лекций: учеб.
пособие. СПб.: Изд-во СПбГЭТУ «ЛЭТИ», 2010. 000 с.
8. Описание методических указаний / сост.: И.И. Иванов, П.П. Петров.
СПб.: Изд-во СПбГЭТУ «ЛЭТИ», 2010. 000 с.
9. Иванов И.И. Описание статьи с одним-тремя авторами из журнала //
Название журнала. 2010, вып. (№) 00. С. 000–000.
10. Описание статьи с четырьмя и более авторами из журнала / И. И.
Иванов, П. П. Петров, С. С. Сидоров и др. // Название журнала. 2010, вып. (№)
00. С. 000–000.
17
11. Иванов И.И. Описание тезисов доклада с одним-тремя авторами /
Название конференции: тез. докл. III международной науч.-техн. конф., СПб,
00–00 янв. 2000 г. / СПбГЭТУ «ЛЭТИ», СПБ, 2010, С. 000–000.
12. Описание тезисов доклада с четырьмя и более авторами / И. И. Иванов,
П. П. Петров, С. С. Сидоров и др. // Название конференции: тез. докл. III
международной науч.-техн. конф., СПб, 00–00 янв. 2000 г. / СПбГЭТУ «ЛЭТИ»,
СПБ, 2010, С. 000–000.
13. Описание электронного ресурса // Наименование сайта. URL:
http://east-front.narod.ru/memo/latchford.htm (дата обращения: 00.00.2010).
14. ГОСТ 0.0–00. Описание стандартов. М.: Изд-во стандартов, 2010.
15. Пат. RU 00000000. Описание патентных документов / И. И. Иванов, П.
П. Петров, С. С. Сидоров. Опубл. 00.00.2010. Бюл. № 00.
16. Иванов И.И. Описание авторефератов диссертаций: автореф. дисс.
канд. техн. наук / СПбГЭТУ «ЛЭТИ», СПБ, 2010.
17. Описание федерального закона: Федер. закон [принят Гос. Думой
00.00.2010] // Собрание законодательств РФ. 2010. № 00. Ст. 00. С. 000–000.
18. Описание федерального постановления: постановление Правительства
Рос. Федерации от 00.00.2010 № 00000 // Опубликовавшее издание. 2010. № 0.
С. 000–000.
19. Описание указа: указ Президента РФ от 00.00.2010 № 00 //
Опубликовавшее издание. 2010. № 0. С. 000–000.
18
ПРИЛОЖЕНИЕ А
НАЗВАНИЕ ПРИЛОЖЕНИЯ
19
Download