Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # !/usr/bin/env python3
- import sys
- import gurobipy as gb
- # pilots
- n = 12;
- # dates
- m = 4;
- # commissioners
- k = 5;
- cij = [[1, 0, 0, 1],
- [1, 0, 1, 1],
- [0, 0, 0, 1],
- [0, 0, 1, 1],
- [1, 1, 1, 1],
- [0, 0, 0, 1],
- [1, 0, 1, 1],
- [0, 0, 0, 0],
- [0, 1, 0, 1],
- [1, 0, 0, 1],
- [1, 1, 0, 1],
- [0, 0, 1, 1]]
- dlj = [[1, 1, 0, 1],
- [1, 0, 0, 1],
- [1, 1, 0, 1],
- [0, 0, 0, 1],
- [1, 1, 1, 1],
- ]
- model = gb.Model()
- # pilot i attends date j
- aij = [];
- for i in range(0, n):
- aij.append([model.addVar(lb=0, ub=1, vtype=gb.GRB.INTEGER, name="a_" + str(i)+"_" + str(j)) for j in range(0, m)])
- # commissioner l attends date j
- blj = [];
- for l in range(0, k):
- blj.append([model.addVar(lb=0, ub=1, vtype=gb.GRB.INTEGER, name="b_" + str(l)+"_" + str(j)) for j in range(0, m)])
- # each pilot attends a date exactly once
- sum = 0;
- for i in range(0, n):
- for j in range(0, m):
- sum += aij[i][j]
- model.addConstr(sum == 1)
- # number of pilots must equal to the number of commissioners
- for j in range(0, m):
- model.addConstr(gb.quicksum([aij[i][j] for i in range(0, n)]) == gb.quicksum([blj[l][j] for l in range(0, k)]))
- # each pilot will come to a date he can
- sum =0;
- for i in range(0, n):
- for j in range(0, m):
- sum += aij[i][j]*cij[i][j]
- model.addConstr(sum == 1)
- # commissioner can come to a date he will come
- for l in range(0, k):
- for j in range(0, m):
- model.addConstr(blj[l][j] <= dlj[l][j])
- model.update()
- model.optimize()
- model.write("pilotsRes.lp")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement