Начальные решения
В тех случаях, когда в процессе решения задачи MIP медленно находится первоначальные решение, использовние функционала установки начальных решений может значительно повлиять на производительность. Разработчик модели предоставляет алгоритмам допустимое решение вместе с моделью. Это реализуется через методы API, такие как Model.add_mip_start_values()
в Python или функцию AddMipStartValue()
в C++. В качестве параметра метод принимает путь к файлу с решением (.sol), либо словарь со значениями.
Применение начального решения в задачах MIP может быть осуществлено с использованием файла решений *.sol
, например:
import arhiplexpy as ap
m = ap.Model()
m.set_dbl_param('time_limit', 60)
# Чтение модели из файла
m.read('models/csched007.mps')
# Решение задачи и запись решения в файл
result = m.solve_remote('temp/mapping.txt')
result.write_solution('temp/csched007.sol')
# Добавление решение из файла в качестве начального и повторный запуск решения
m.add_mip_start_values('temp/csched007.sol')
result = m.solve_remote('temp/mapping.txt')
В данном примере можно рассмотреть механику применения начального решение через повторный запуск той же задачи с начальным решением из файла. Значение целевой функции во второй части решения уже учитывает применённое начальное решение.
Кроме того, применение начального решения может быть осуществлено с использованием словаря, где ключ - наименование переменной, а значение - численное значение переменное в применяемом решении. Например:
import arhiplexpy as ap
m = ap.Model()
m.set_dbl_param('time_limit', 60)
# Чтение модели из файла
m.read('models/csched007.mps')
# Решение задачи
result = m.solve_remote('temp/mapping.txt')
# Экспорт решения в словарь
start_solution = {}
for i in range(1758):
var_name = m.get_variable(i).get_name()
var_value = result.get_variable_value(var_name)
start_solution[var_name] = var_value
# Добавление решение из словаря в качестве начального и повторный запуск решения
m.add_mip_start_values(start_solution)
result = m.solve_remote('temp/mapping.txt')
В данном примере файл решения не используется, однако, оперирование начальным решением и его подстановка во второй запуск осуществляется.