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

Исследование_Операций_ЛР3

.docx
Скачиваний:
7
Добавлен:
31.05.2024
Размер:
149.47 Кб
Скачать

Таблица 2.4 – Вспомогательные расчеты для S1

S1

x1

φ1

S2

w2

w1=φ1+φ2

8

0

0

8

2,9

2,9

1

0,2

7

2,8

3

2

0,4

6

2,7

3,1

3

0,6

5

2,5

3,1

4

0,8

4

2,3

3,1

5

1

3

2,2

3,2

6

1,2

2

1,8

3

7

1,4

1

1

2,4

8

1,5

0

0

1,5

Таблица 2.5 – Сводная таблица по расчетам

S

П4

П3

П2

П1

x4

φ4

x3

w3

x2

w2

x1

w1

1

1

1

0

1

0

1

 

 

2

2

1

1

1,8

0

1,8

 

 

3

3

1,1

2

1,9

1

2,2

 

 

4

4

1,1

3

2,1

1,2

2,3

 

 

5

5

1,2

4

2,3

1

2,5

 

 

6

6

1,2

5

2,4

1

2,7

 

 

7

7

1,3

6

2,5

1,2

2,8

 

 

8

8

1,3

5,6,7

2,5

1,2,3

2,9

5

3,2

Таблица 2.6 – Итоговое распределение ресурсов

План распределения ресурсов

X1

X2

X3

X4

5

1

1

1

Для решения данной задачи был написан программный код, приведенный в Приложении А. Исходные данные, записанные на отдельном листе в таблице Excel, загружаются в виде датасета при помощи библиотеки pandas. Далее реализован алгоритм, выполняющий те же шаги, что и в ручном способе. Для всей состояний создаются вспомогательные таблицы, в последней из которых определяется максимально-возможная выручка. Чтобы далее восстановить сколько ресурсов было выделено на каждой предприятие, и каждом выборе максимальной получившейся суммы, записывается выделенное число ресурсов, получившаяся сумма и предыдущая максимальная сумма. По данной сводной таблице начиная в обратном порядке по максимальной итоговой сумме находится выделенной число ресурсов, после чего сумма заменяется на предыдущую, и так пока не будут определены ресурсы для n-1 предприятий. Количество ресурсов, отданное последнему предприятию равняется разности максимального числа ресурсов и набранного.

На Рисунке 1 представлена excel таблица с исходными данными, которые взяты для решения задачи. Результат работы программы при загрузке данной таблице, в соответствии с Рисунком 2, совпадает с решением найденным ручным способом, рассмотренным ранее. Максимальная выручка составляет 3.2, при распределении ресурсов: 5, 1, 1, 1 для первого, второго, третьего и четвертого предприятия соответственно.

Рисунок 1 – Таблица с исходными данными

Рисунок 2 – Результат работы программы

Вывод:

В ходе выполнения лабораторной работы получены практические навыки решения задач распределения ресурсов при помощи динамического программирования.

В частности решена задача разгрузки при ограниченной грузоподъемности, а также задача о распределении ресурсов. Для решения второй задачи написан программный код, позволяющий динамически решать поставленную задачу.

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

ПРИЛОЖЕНИЕ А. ПРОГРАММА ДЛЯ РЕШЕНИЯ ЗАДАЧИ

# -*- coding:cp1251 -*-

import pandas as pd

# Путь к файлу

file = r"C:\Users\anast\Desktop\6 семестр\Иследование операций\Lab3_2.xlsx"

# Загрузка excel файла

xl = pd.ExcelFile(file)

def compute_S(f1,f2):

max_g = len(f1)

w = []

w_prev = []

steps = []

for stage in range(1,max_g+1):

#print(f"Stage = {stage}")

max_w = 0

w_p = 0

s = 0

for step in range(0,stage+1):

if step == 0:

a = 0

b = f2[stage-1]

elif step == stage:

a = f1[stage-1]

b = 0

else:

a = f1[step-1]

b = f2[stage-step-1]

#print(f"a = {a}\tb = {b}")

if round(a+b,1) > max_w:

max_w = round(a+b,1)

global last_step

s = step

w_p = b

w_prev.append(w_p)

w.append(max_w)

steps.append(s)

return w, w_prev, steps

def solve_the_problem(df):

b = df[df.columns[-1]]

max_g = len(df)

pivot_table = []

for i in range(len(df.columns) - 2, 0, -1):

a = df[df.columns[i]]

b, w_prev, steps = compute_S(a, b)

pivot_table.append([b,w_prev,steps])

max_price = max(b)

result = []

for batch in pivot_table[::-1]:

i = batch[0].index(max_price)

max_price = batch[1][i]

result.append(batch[2][i])

result.append(max_g-sum(result))

print(f"Распределение по предприятиям: \t{result}")

print(f"Итоговая сумма\t{max(b)}")

df = xl.parse(f'Data0')

print(df)

solve_the_problem(df)

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