Время обработки замены, лучший код не обновляетсяPython

Программы на Python
Anonymous
Время обработки замены, лучший код не обновляется

Сообщение Anonymous »


Мой идеал — использовать метод имитации отжига, чтобы найти лучшее время завершения, причем лучшее время завершения — лучший код

Время обработки означает следующее: Задача 1: Время обработки 40 Задача 2: Время обработки 22 Задача 3: Время обработки 38 Задача 4: Время обработки 19 Задача 5: Время обработки 14 Задача 6: Время обработки 35 Задача 7: Время обработки 10 Задача 8: Время обработки 7 Задача 9: Время обработки 11 Задача 10: Время обработки 28

Если поменять местами задания, общее время выполнения будет разным.

у меня есть код:
``` импортировать numpy как np импортировать случайный из опыта импорта Scipy список_заказа = [[1, 2, 0, 4, 0, 6, 7, 0, 9, 10], [1, 2, 3, 0, 5, 0, 7, 0, 9, 10], [1, 0, 3, 4, 5, 6, 7, 8, 9, 0], [1, 0, 3, 4, 5, 6, 0, 0, 9, 10], [0, 2, 0, 0, 5, 6, 7, 8, 9, 10]] process_time = {1:40, 2:22, 3:38, 4:19, 5:14, 6:35, 7:10, 8:7, 9:11, 10:28} Защиту Calculate_Completion_time (время обработки, порядок): время завершения_время = [] текущее_время = 0 для меня в диапазоне (len (порядок)): работа = заказ[я] текущее_время += время_обработки[i+1] завершение_time.append(current_time if job != 0 else 0) # Установите время завершения на 0, если задание равно 0 вернуть завершение_время Защиту Calculate_total_completion_time (список_заказов, время обработки): общее_время_завершения = 0 для заказа в order_list: завершение_раз = расчет_завершение_время (время_обработки, заказ) общее_время_завершения += сумма(время_завершения) вернуть total_completion_time защита swap_processing_times(processing_time): т = список(processing_time.items()) я = случайный.randint(0, len(process_time) - 1) j = random.randint(0, len(process_time) - 1) t, t[j] = t[j], t new_processing_time = dict(t) вернуть новое_время_обработки def Simulated_annealing (время обработки, начальная температура, скорость охлаждения, итерации, список заказов): текущее_время_обработки = время_обработки текущая_стоимость = вычисляемое_общее_время_завершения (список_заказов, время_обработки) лучшее_время_обработки = текущее_время_обработки лучшая_стоимость = текущая_стоимость температура = начальная_температура Processing_times = [] # Список для хранения времени обработки для каждой итерации для итерации в диапазоне(итерации): # Генерируем соседнее решение new_processing_time = swap_processing_time(current_processing_time) Сосед_стоимость = вычислять_общее_время_завершения (список_заказов, новое_время_обработки) если температура == 0: # Если температура равна 0, нет необходимости вычислять np.exp принять_вероятность = 1,0 еще: Accept_probability = np.exp((текущая_стоимость - соседняя_стоимость) / температура) # Принять соседа, если он улучшает решение или с определенной вероятностью, основанной на температуре если сосед_стоимость Результат времени обработки на каждой итерации меняется, но лучшая стоимость (то есть общее время выполнения) не меняется. как рассчитать наилучшую стоимость по новому времени обработки на каждой итерации. вот результат: Итерация 1: Лучшая стоимость = 5165, Время обработки = {1: 40, 10: 28, 3: 38, 4: 19, 5: 14, 6: 35, 7: 10, 8: 7, 9: 11, 2: 22} Итерация 2: Лучшая стоимость = 5165, Время обработки = {1: 40, 6: 35, 3: 38, 4: 19, 5: 14, 10: 28, 7: 10, 8: 7, 9: 11, 2: 22} Итерация 3: Лучшая стоимость = 5165, Время обработки = {1: 40, 6: 35, 9: 11, 4: 19, 5: 14, 10: 28, 7: 10, 8: 7, 3: 38, 2: 22} Лучшее время обработки: {1:40, 2:22, 3:38, 4:19, 5:14, 6:35, 7:10, 8:7, 9:11, 10:28} Время завершения: [[40, 62, 0, 119, 0, 168, 178, 0, 196, 224], [40, 62, 100, 0, 133, 0, 178, 0, 196, 224], [40 , 0, 100, 119, 133, 168, 178, 185, 196, 0], [40, 0, 100, 119, 133, 168, 0, 0, 196, 224], [0, 62, 0, 0 , 133, 168, 178, 185, 196, 224]] Сумма времен завершения: 5165.

Вернуться в «Python»