при отладке реализации более крупной модели потока на орграфе я обнаружил странную ошибку в одном из компонентов, которая привела бы к недопустимой ошибке модели по gurobi. Переход от выполнимости к невозможности, по-видимому, связан с изменением направления потока через единственную дугу (1,0), из которой состоит модель. Я просто не могу понять это. См. Ниже недопустимую модель .lp-файла
\ Model Model1
\ LP format - for model browsing. Use MPS format to capture full model detail.
Minimize
Subject To
p_lb[0]: pressure[0] >= 10
p_lb[1]: pressure[1] >= 10
p_ub[0]: pressure[0] <= 80
p_ub[1]: pressure[1] <= 80
q_lb[1,0]: q[1,0] >= -100
q_ub[1,0]: q[1,0] <= 100
Flow_Balance[0]: q[1,0] = -50
Flow_Balance[1]: - q[1,0] = 50
short_cut2[1,0]: - pressure[0] + pressure[1] = 0
Bounds
End
На данный момент вся проблема - проблема осуществимости, поэтому моя цель - ноль. У меня есть ограниченные переменные давления в узлах 0 и 1, переменная потока по дуге, которая возникает в балансах потока в каждом узле. Кроме того, я хочу, чтобы значения давления в узлах совпадали.
Я выбросил .lp-файлы и .mps-файлы в мое сравнение текста VSC, но, похоже, они не отличаются, за исключением направления потока,У меня сильное чувство, что я могу что-то упустить. Ниже также .mps-файлы для обоих направлений потока.
Возможное:
NAME Model1
ROWS
N OBJ
G p_lb[0]
G p_lb[1]
L p_ub[0]
L p_ub[1]
G q_lb[1,0]
L q_ub[1,0]
E Flow_Balance[0]
E Flow_Balance[1]
E short_cut2[1,0]
COLUMNS
pressure[0] p_lb[0] 1
pressure[0] p_ub[0] 1
pressure[0] short_cut2[1,0] -1
pressure[1] p_lb[1] 1
pressure[1] p_ub[1] 1
pressure[1] short_cut2[1,0] 1
q[1,0] q_lb[1,0] 1
q[1,0] q_ub[1,0] 1
q[1,0] Flow_Balance[0] 1
q[1,0] Flow_Balance[1] -1
RHS
RHS1 p_lb[0] 10
RHS1 p_lb[1] 10
RHS1 p_ub[0] 80
RHS1 p_ub[1] 80
RHS1 q_lb[1,0] -100
RHS1 q_ub[1,0] 100
RHS1 Flow_Balance[0] 50
RHS1 Flow_Balance[1] -50
BOUNDS
ENDATA
Невозможное:
NAME Model1
ROWS
N OBJ
G p_lb[0]
G p_lb[1]
L p_ub[0]
L p_ub[1]
G q_lb[1,0]
L q_ub[1,0]
E Flow_Balance[0]
E Flow_Balance[1]
E short_cut2[1,0]
COLUMNS
pressure[0] p_lb[0] 1
pressure[0] p_ub[0] 1
pressure[0] short_cut2[1,0] -1
pressure[1] p_lb[1] 1
pressure[1] p_ub[1] 1
pressure[1] short_cut2[1,0] 1
q[1,0] q_lb[1,0] 1
q[1,0] q_ub[1,0] 1
q[1,0] Flow_Balance[0] 1
q[1,0] Flow_Balance[1] -1
RHS
RHS1 p_lb[0] 10
RHS1 p_lb[1] 10
RHS1 p_ub[0] 80
RHS1 p_ub[1] 80
RHS1 q_lb[1,0] -100
RHS1 q_ub[1,0] 100
RHS1 Flow_Balance[0] -50
RHS1 Flow_Balance[1] 50
BOUNDS
ENDATA
Буду признателен, если выможет пролить свет во тьму:)