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

Заболотников_9373_ПР2

.pdf
Скачиваний:
9
Добавлен:
20.06.2023
Размер:
463.45 Кб
Скачать

Ив конце, так как рядом с числом –7000 стоит двойка, мы понимаем, что

впоследний год мы должны перейти с состояние 20, а после продать всё оборудование, возраст которого составит 1 год. Итого, мы имеем:

a) В первый год затраты на обслуживание текущего оборудования типа М1, затраты: 576 тыс. рублей;

b) Во второй год происходит замена оборудования на тип М2, затраты:

9500 + 600 + 550 – 8748 = 1902 тыс. рублей;

c) В третий гож происходит замена оборудования на тот же тип, М2,

затраты: 9500 + 600 – 8550 = 1550 тыс. рублей;

d) В четвёртый год происходит замена оборудования на тот же тип, М2,

затраты: 9500 + 600 – 8550 = 1550 тыс. рублей;

e) В пятый год происходит замена оборудования на тот же тип, М2,

затраты: 9500 + 600 – 8550 = 1550 тыс. рублей;

f) В последний, шестой год происходит замена оборудования на тот же тип, М2, затраты: 9500 + 600 – 8550 = 1550 тыс. рублей

И в конце мы продаём всё оборудование за 8550 тыс. рублей. Всего: 576 + 1902 + 1550 + 1550 + 1550 + 1550 – 8550 = 128 тыс. рублей

11

ЗАКЛЮЧЕНИЕ

В ходе работы были решены поставленные задачи и получены определённые результаты. Выяснилось, что оптимальной стратегией по замене оборудования стала стратегия (0, 2, 2, 2, 2, 2). В итоге суммарные затраты составят 128 тыс. рублей. Также выяснилось, что такая стратегия останется оптимальной до тех пор, пока цена за оборудование не опустится ниже 12217 тыс. рублей. Если цена будет равна 12216 тыс. рублей, то оптимальная стратегия будет уже другой.

12

ПРИЛОЖЕНИЕ А.

КОД ПРОГРАММЫ (PYTHON)

import numpy as np

sell_price = [[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] servicing = np.vstack([m1, m2])

change_cost = [12500, 9500]

def win(m, a, u): mark = m

age = a if(u == 0):

w = servicing[mark - 1][age] elif(u == 1):

w = servicing[0][0] + change_cost[0] - sell_price[age][mark - 1] + 550 * int(mark != 1)

elif(u == 2):

w = servicing[1][0] + change_cost[1] - sell_price[age][mark - 1] + 550 * int(mark != 2)

return w

def state_transition(m, a, u): if(u == 0):

age = a + 1 mark = m

else:

age = 1 mark = u

s = 10 * mark + age return s

W_table = [{} for i in range(6)]

NINF = 10000000

13

for marks in [1, 2]: if(marks == 1):

for age in [1, 2, 3, 4, 5, 6, 7]: index = 10 + age W_table[5][index] = (NINF, None) for u in range(3):

if(u == 0):

W = win(1, age, u) - sell_price[age + 1][marks - 1] else:

W = win(1, age, u) - sell_price[1][u - 1] if W_table[5][index][0] > W:

W_table[5][index] = (W, u)

if(marks == 2):

for age in [1, 2, 3, 4, 5]: index = 20 + age

W_table[5][index] = (NINF, None) for u in range(3):

if(u == 0):

W = win(2, age, u) - sell_price[age + 1][marks - 1] else:

W = win(2, age, u) - sell_price[1][u - 1] if W_table[5][index][0] > W:

W_table[5][index] = (W, u)

for marks in [1, 2]: if(marks == 1):

for age in [1, 2, 3, 4, 5, 6]: index = 10 + age W_table[4][index] = (NINF, None) for u in range(3):

W = win(1, age, u) + W_table[5][state_transition(1, age,

u)][0]

if W_table[4][index][0] > W: W_table[4][index] = (W, u)

if(marks == 2):

for age in [1, 2, 3, 4]: index = 20 + age

W_table[4][index] = (NINF, None)

14

for u in range(3):

W = win(2, age, u) + W_table[5][state_transition(2, age,

u)][0]

if W_table[4][index][0] > W: W_table[4][index] = (W, u)

for i in reversed(range(5)): for marks in [1, 2]:

if(marks == 1):

for age in range(i + 3): if(age != 0):

index = 10 + age W_table[i][index] = (NINF, None) for u in range(3):

W = win(1, age, u) + W_table[i + 1][state_transition(1, age, u)][0]

if W_table[i][index][0] > W: W_table[i][index] = (W, u)

if(marks == 2):

for age in range(i + 1): if(age != 0):

index = 20 + age W_table[i][index] = (NINF, None) for u in range(3):

W = win(2, age, u) + W_table[i + 1][state_transition(2, age, u)][0]

if W_table[i][index][0] > W: W_table[i][index] = (W, u)

15

Соседние файлы в предмете Теория принятия решений