Skip to content
Snippets Groups Projects
Commit 407c36e5 authored by Jiří Kalvoda's avatar Jiří Kalvoda
Browse files

Algo += opt_int_prog

parent 50fb1208
Branches
No related tags found
No related merge requests found
#!/usr/bin/env sage
import sys
sys.argv[0] = sys.argv[0][:-3]
import lib
import numpy as np
lib.VERSION = int(2)
@lib.prog
def opt_int_prog(n, inp, args):
other = lib.gen_arr_other_car_of_type(n, inp)
sgn = [1 if other[i]>i else -1 for i in range(2*n)]
p = MixedIntegerLinearProgram(maximization=False, solver=args[0])
x = p.new_variable(integer=True, nonnegative=True)
car_x = [ x[inp[i]] if sgn[i]==1 else 1-x[inp[i]] for i in range(2*n)]
changes = p.new_variable(integer=True, nonnegative=True)
for i in range(2*n-1):
p.add_constraint(changes[i] >= car_x[i] - car_x[i+1])
p.add_constraint(changes[i] >= car_x[i+1] - car_x[i])
p.set_objective(sum(changes[i] for i in range(2*n-1)))
p.solve()
xv = p.get_values(x)
return [ int(xv[inp[i]] if sgn[i]==1 else 1-xv[inp[i]]) for i in range(2*n)]
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment