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

Саляхов ИВТ-329Б ТПР ЛР№2

.docx
Скачиваний:
0
Добавлен:
25.06.2025
Размер:
388.1 Кб
Скачать

Министерство науки и высшего образования Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего образования

«Уфимский университет науки и технологий»

Лабораторная работа №2

по дисциплине «Теория принятия решений»

«Динамическое программирование»

Вариант №9

Выполнил: студент гр. ИВТ-329Б

Саляхов А.Ф.

Проверил доц. каф. ТК

Насыров Р.В.

Уфа-2023

Цель работы: знакомство с детерминированными и вероятностными

задачами динамического программирования, изучение различных методов

решения в системе компьютерной математики

Задание: Число вершин 10; 1 связан с 2 и 4, блочно-диагональная, шириной 4

Текст программы

import random CountVar = 10 M = [[0 for i in range(CountVar)] for j in range(CountVar)] M[0][1] = random.randint(1, 20) M[0][3] = random.randint(1, 20) M[1][2] = random.randint(1, 20) M[1][3] = random.randint(1, 20) M[1][4] = random.randint(1, 20) M[2][3] = random.randint(1, 20) M[2][4] = random.randint(1, 20) M[3][4] = random.randint(1, 20) M[4][5] = random.randint(1, 20) M[5][6] = random.randint(1, 20) M[5][7] = random.randint(1, 20) M[5][8] = random.randint(1, 20) M[6][7] = random.randint(1, 20) M[6][8] = random.randint(1, 20) M[7][8] = random.randint(1, 20) M[8][9] = random.randint(1, 20) for i in range(CountVar): for j in range(CountVar): if i == j: M[i][j] = "-" minp = [100 for i in range(CountVar)] for i in range(CountVar): for j in range(CountVar): print(M[i][j], end="\t") print() pravo = { 0: [9], 1: [8, 9], 2: [7, 8, 9], 3: [6, 7, 8, 9], 4: [5, 6, 7, 8, 9], 5: [4, 5, 6, 7, 8], 6: [3, 4, 5], 7: [2, 3, 4], 8: [1, 2] } levo = { 0: [8, 9], 1: [7, 8, 9], 2: [6, 7, 8, 9], 3: [5, 6, 7, 8, 9], 4: [4, 5, 6, 7, 8], 5: [3, 4, 5], 6: [2, 3, 4], 7: [1, 2], 8: [0] } v = [1] start = 1 otvet = 0 for k in range(CountVar-1): print("x", k+1, "|\t\t\t\t\t\t\t\t") print("\t|", end=" ") for i in range(len(pravo[k])): print(pravo[k][i]+1, end="\t|\t") print("f(x)|\tx*\t") print("---------------------------------------------------------------------------") for i in range(len(levo[k])): min = 100 ans = [0 for z in range(10)] print(levo[k][i]+1, "\t|", end="") for j in range(len(pravo[k])): if pravo[k][j] == levo[k][i]: print(" ", 0, "\t|", end="") else: if start==1: minp[k]=M[levo[k][i]][pravo[k][j]] ans[pravo[k][j]] += M[levo[k][i]][pravo[k][j]] min = ans[pravo[k][j]] print(' ', ans[pravo[k][j]], "\t|", end="") start-=1 elif M[levo[k][i]][pravo[k][j]] ==0: print(' ----', "\t|", end="") elif M[levo[k][i]][pravo[k][j]] != "-": ans[pravo[k][j]]+=M[levo[k][i]][pravo[k][j]]+minp[pravo[k][j]] if minp[pravo[k][j]]==100: ans[pravo[k][j]]-=100 if ans[pravo[k][j]]<=min and ans[pravo[k][j]]!=0: min=ans[pravo[k][j]] print(' ',ans[pravo[k][j]], "\t|", end="") minp[levo[k][i]]=min if minp[levo[k][i]]==100: print(" ",minp[levo[k][i]]-100, "\t|", end="") else: print(" ", minp[levo[k][i]], "\t|", end="") otvet=minp[levo[k][i]] for j in range(len(pravo[k])): if pravo[k][j] == levo[k][i]: print(" ",pravo[k][j]+1, "\t|", end="") for i in range(len(ans)): if min==ans[i]: print(" ", i+1, "\t|", end="") v.append(i+1) print() print("Последовательность узлов:", set(sorted(v))) print("Длина пути", otvet)

Тестирование

Тест №1:

Тест №2:

Тест №3:

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

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