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

lab3_IO_Zhovtyak

.pdf
Скачиваний:
6
Добавлен:
27.08.2024
Размер:
490.77 Кб
Скачать

Цель работы

Найти решение задачи эвакуации и задачи распределения ресурсов.

Вариант

Вариант – 14. Задание показано на рисунке 1.

Рисунок 1 – Условия по варианту

Ход работы

Вручную была посчитана задача эвакуации. На таблице 1 показано итоговое решение задачи, на таблице 2 – предварительная оптимизация, на таблицах 3-4 – примеры промежуточных расчетов для ячеек.

Таблица №1

Решение задачи эвакуации

 

П1

П2

П3

П4

 

 

 

 

 

g (вес)

2

3

4

4

 

 

 

 

 

C (цена)

30

35

40

50

 

 

 

 

 

x

1

0

1

1

 

 

 

 

 

Таблица предварительной оптимизации заполнялась следующим образом: предметы были расположены на эвакуацию в обратном порядке,

чтобы самый маленький вес был в последней колонке; в последней колонке оставляем только две последние строки (так как вес П1 равен 2), так как подразумевается, что все ячейки мест выше уже заняты; таблица заполнялась слева на право; для каждого предмета, в зависимости от его цены и веса,

было принято решение брать его или нет.

Ход решения:

1. Предмет 4 имеет вес 4 и цену 50. Следовательно, мы не можем его взять, пока доступная грузоподьемность (S) меньше, чем 4. При S равном 4

возможно взять предмет, поэтому в решение (x4) записывается 1 (берем), в

общую ценность (ω4) цена предмета 50. При увеличении S предмет все также возможно взять.

2. Предмет 3 имеет вес 4 и цену 50. Следовательно, его можно взять только при S равном 4. Однако, в прошлой колонке при S равном 4 уже есть значение (предмет П4 взят). Так как места при S равном 4 только 4, то нужно определить, что выгодней взять – П3 или П4. П3 имеет цену лишь 40, а А4 50

– выгоднее взять П4. При этом, цена на данный момент будет равна цене взятого товара П4 (50) При увеличении S увеличивается и доступное место

(при S = 5, раз берем П4, то свободно будет одно место) – следовательно, при

S равном 8 будет уже 4 свободных мест (берем П4, который весит 4. 8-4=4).

Таким образом, при s равном 8 можно взять предмет П3. Тогда цена на данный момент (ω3) будет равен весу П3+П4=40+50=90.

3. Предмет 2 имеет вес 3 и цену 35. Заполнение происходит аналогичным прошлому способу. Так, при 4 свободных местах данный товар не выгодно брать, а при 7 можно взять и П4 и П2. При s равном 8 уже нужно решить, что выгодней П4+П3 (90) или П4+П2(85). Первый вариант выгоднее,

поэтому П2 не взят.

4. Предмет 1 весит 2 и стоит 30. Для определения берем\не берем применялась вспомогательная таблица (таблицы 3-4), так как вариантов

прошлых действий достаточно много. В вспомогательной таблице мы рассматриваем два варианта: берем (x = 1) или не берем(x= 0). Также указываем цену (если берем, то она равна 30, если нет, то 0). После этого указываем какой вес из прошлой колонки доступен (когда проверяем s=9, то если не берем, то просматриваем прошлую колонку со значением 9, если берем, то доступный вес уменьшается и просматриваем уже 9-2=7 колонку).

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

5. Выделяем последнюю строку последнего столбца. Видим, что принято решение брать П1. П1 весит 2, поэтому дальше выделяем 10-2-8

строку. Видим, что принято решение не брать П2, поэтому просматриваем туже строку столбца для П3. Видим, что принято решение брать П3.

Просматриваем столбец для П4 8-4=4. Выделяем клетку. Выделение клетки показывают решение – берем или не берем.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблица №2

 

 

Таблица предварительной оптимизации

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

S

 

 

П4

 

 

П3

 

П2

 

 

 

П1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x4

 

 

ω4

 

x3

 

 

ω3

 

x2

 

ω2

 

x1

 

ω1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

0

 

0

0

 

0

0

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2

0

 

0

0

 

0

0

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

0

 

0

0

 

0

1

 

35

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

4

 

1

 

 

50

0

 

50

0

 

50

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

1

 

50

0

 

50

0

 

50

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6

1

 

50

0

 

50

0

 

50

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

7

1

 

50

0

 

50

1

 

85

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8

1

 

50

 

1

 

 

90

 

0

 

90

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

9

1

 

50

1

 

90

0

 

90

 

1

 

115

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10

 

1

 

50

1

90

0

90

1

 

120

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблица №3

 

 

 

 

Пример промежуточных расчетов

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X1

 

 

X1C1

 

 

S2

 

 

ω2

 

 

 

ω1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

30

 

 

7

 

 

85

 

 

115

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

0

 

 

9

 

 

90

 

 

90

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Таблица №4

 

 

 

 

Пример промежуточных расчетов

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

X1

 

 

X1C1

 

 

S2

 

 

ω2

 

 

 

ω1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

30

 

 

8

 

 

90

 

 

120

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

0

 

 

10

 

 

90

 

 

90

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Согласно полученным результатам, эвакуации подлежат: П1, П3 и П4.

Задача распределения ресурсов была при помощи программных средств. На рисунке 2 показана исходная задача, подаваемая в виде матрицы.

Ответ, полученный на основе составленного кода, показан на рисунке 3.

Краткое описание кода: на основе имеющихся и получаемых значений образуются список для всех списков x и ω (рисунок 4). По итогу, если списки рассматривать вместе, то получаем ту же таблицу, что строили на лекции.

После этого, подобно тому, как выбирали итоговое решение в таблице 2,

выделяем решения в ней. После этого возвращаемся к исходной задаче

(рисунок 1) и смотрим, какие значения для каждого П на выбранных местах x.

Рисунок 2 – Исходная задача

Рисунок 3 – Ответ на задачу распределения

Рисунок 4 – Значение списков x и ω и решение по ним Листинг. Решение задачи распределения ресурсов

def mision_ressources(tableau):

#В матрице результатов значения матрицы перевернуты matrice_res=[]

matrice_value=[]

for i in range(len(tableau[0])): mass_res_une=[] mass_res_une2=[]

for j in range(len(tableau)): mass_res_une.append(0) mass_res_une2.append(0)

matrice_res.append(mass_res_une) matrice_value.append(mass_res_une2)

#Матрица значений результатов

#Заполняем первую строку

for i in range(len(matrice_res[0])): matrice_value[0][i]=tableau[i][0] matrice_res[0][i]=i+1

#Заполняем прочие строки

for i in range(1,len(matrice_res)):

for j in range(len(matrice_res[i])): table_help=[]

#Создаем вспомогательную таблицу. число строк - for k in range(j+2):

table_help_une=[] for s in range(5):

table_help_une.append(0) table_help.append(table_help_une)

#Заполняем полученную таблицу for k in range(len(table_help)):

table_help[k][0]=k if k!=0:

table_help[k][1]=tableau[k-1][i] table_help[k][2]=len(table_help)-(k+1) if table_help[k][2]!=0:

table_help[k][3]=matrice_value[i-1][table_help[k][2]-1] table_help[k][4]=table_help[k][1]+table_help[k][3]

#Находим максимальный элемент max=0

for k in range(len(table_help)): if table_help[k][4]>max:

max=table_help[k][4] max_index=k

matrice_value[i][j]=max matrice_res[i][j]=max_index

#Создаем массив с выбраными φ mass_res=[] S=len(matrice_value[i])-1

for i in range(len(matrice_value)): mass_res.append(matrice_res[len(matrice_value)-i-1][S]) S=S-matrice_res[len(matrice_value)-i-1][S]

mass_res=list(reversed(mass_res)) victoire=0

for i in range(len(mass_res)): t=tableau[mass_res[i]-1][i] victoire=victoire+tableau[mass_res[i]-1][i]

return(mass_res,round(victoire,2)) tabl=[[0.3,1.0,1.3,0.9],

[0.4,1.1,1.4,0.9],

[0.6,1.2,1.6,1.0],

[0.5,1.2,1.6,1.1],

[0.7,1.4,1.5,1.1],

[0.8,1.5,1.8,1.4],

[0.9,1.7,1.7,1.4]] res,victoire = mision_ressources(tabl) print('Максимальный доход - ', victoire) print('При распределении - ', res)

Вывод

В ходе работы были изучен процесс решения задачи эвакуации и

задачи распределения ресурсов.

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