56
gap.json
Normal file
56
gap.json
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
{
|
||||||
|
"SolutionInfo": {
|
||||||
|
"Status": 2,
|
||||||
|
"Runtime": 1.2390613555908203e-03,
|
||||||
|
"Work": 1.0477234319444459e-04,
|
||||||
|
"ObjVal": 978.02,
|
||||||
|
"ObjBound": 978.02,
|
||||||
|
"ObjBoundC": 978.02,
|
||||||
|
"MIPGap": 0,
|
||||||
|
"IntVio": 0,
|
||||||
|
"BoundVio": 0,
|
||||||
|
"ConstrVio": 1.2434497875801753e-14,
|
||||||
|
"IterCount": 9,
|
||||||
|
"BarIterCount": 0,
|
||||||
|
"NodeCount": 1,
|
||||||
|
"SolCount": 1,
|
||||||
|
"PoolObjBound": 978.02,
|
||||||
|
"PoolObjVal": [
|
||||||
|
978.02
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"Vars": [
|
||||||
|
{
|
||||||
|
"VarName": "l",
|
||||||
|
"X": 9.99
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"VarName": "b",
|
||||||
|
"X": 100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"VarName": "w1",
|
||||||
|
"X": 999
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"VarName": "w2",
|
||||||
|
"X": 1000
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"VarName": "w3",
|
||||||
|
"X": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"VarName": "c1",
|
||||||
|
"X": 99
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"VarName": "c2",
|
||||||
|
"X": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"VarName": "c3",
|
||||||
|
"X": 101
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
48
gap.py
Normal file
48
gap.py
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
import gurobipy as gp
|
||||||
|
from gurobipy import GRB
|
||||||
|
|
||||||
|
def solve_lp():
|
||||||
|
# 1. Create model
|
||||||
|
model = gp.Model("my_lp")
|
||||||
|
|
||||||
|
# 2. Add variables
|
||||||
|
# Example: x, y >= 0
|
||||||
|
l = model.addVar(lb=0, ub= 100, name="l", vtype=GRB.CONTINUOUS)
|
||||||
|
b = model.addVar(lb=0, ub= 100, name="b", vtype=GRB.INTEGER)
|
||||||
|
w = {}
|
||||||
|
c = {}
|
||||||
|
for i in range(1, 4):
|
||||||
|
w[i] = model.addVar(lb=1, ub=1000, name=f"w{i}", vtype= GRB.INTEGER)
|
||||||
|
for i in range(1, 4):
|
||||||
|
c[i] = model.addVar(lb=1, ub=1000, name=f"c{i}", vtype= GRB.INTEGER)
|
||||||
|
ans = model.addVar(lb=0, name="ans", vtype=GRB.CONTINUOUS)
|
||||||
|
|
||||||
|
# 3. Set objective
|
||||||
|
# model.setObjective(ans, GRB.MAXIMIZE)
|
||||||
|
model.setObjective(l*(c[1]-c[2])-w[2]+w[1], GRB.MAXIMIZE)
|
||||||
|
|
||||||
|
# 4. Add constraints
|
||||||
|
# model.addConstr(w[2] >= w[1] >= w[3] >= 0)
|
||||||
|
model.addConstr(w[2] >= 0.1+ w[1], name="w2_ge_w1")
|
||||||
|
model.addConstr(w[1] >= 0.1+ w[3], name="w1_ge_w3")
|
||||||
|
model.addConstr(w[3] >= 0.1+ 0, name="w3_ge_0")
|
||||||
|
# model.addConstr(c[3] >= b >= c[1] >= c[2] >= 0)
|
||||||
|
model.addConstr(c[3] >= 0.1+ b, name="c3_ge_b")
|
||||||
|
model.addConstr(b >= 0.1+ c[1], name="b_ge_c1")
|
||||||
|
model.addConstr(c[1] >= 0.1+ c[2], name="c1_ge_c2")
|
||||||
|
model.addConstr(c[2] >= 0.1+ 0, name="c2_ge_0")
|
||||||
|
model.addConstr((c[3]-c[2])*l >= w[2]-w[3])
|
||||||
|
model.addConstr((c[3]-c[2])*l <= w[2]-w[3])
|
||||||
|
# model.addConstr(ans*b <= l*(c[1]-c[2])-w[2]+w[1])
|
||||||
|
|
||||||
|
# 5. Optimize
|
||||||
|
model.optimize()
|
||||||
|
|
||||||
|
# 6. Retrieve results
|
||||||
|
if model.status == GRB.OPTIMAL:
|
||||||
|
model.write("gap.json")
|
||||||
|
else:
|
||||||
|
print("No optimal solution found.")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
solve_lp()
|
||||||
Reference in New Issue
Block a user