
# [START program]
# [START import]
from __future__ import print_function
from ortools.linear_solver import pywraplp
# [END import]


def main():
    # [START solver]
    # Create the linear solver with the GLOP backend.
    solver = pywraplp.Solver('simple_lp_program',
                             pywraplp.Solver.GLOP_LINEAR_PROGRAMMING)
    # [END solver]

    # [START variables]
    # Create variables x_i,j >=0, store them in a 2D list to access later
    variables = []
    for i in range(1,5):
        sublist = []
        for j in range(1,4):
            sublist.append(solver.NumVar(0, solver.infinity(), 'x_'+str(i)+","+str(j)))
        variables.append(sublist)
            
    print('Number of variables =', solver.NumVariables())
    print("Should be 12", variables)
    # [END variables]

    # [START constraints]
    # Create a linear constraint, 0 <= x + y <= 2.
    #cargo constraints
    maxcargo = [18,15,23,12]
    for i in range(4):
        ct = solver.Constraint(0,maxcargo[i])
        for j in range(3):
            ct.SetCoefficient(variables[i][j],1)

    #weight constraints
    maxweight = [10,16,8]
    for j in range(3):
        ct = solver.Constraint(0,maxweight[j])
        for i in range(4):
            ct.SetCoefficient(variables[i][j],1)

    maxvolume = [6800,8700,5300]
    coeffs = [480,650,580,390]
    for j in range(3):
        ct = solver.Constraint(0,maxvolume[j])
        for i in range(4):
            ct.SetCoefficient(variables[i][j],coeffs[i])

    print('Number of constraints =', solver.NumConstraints())
    print("Should be 10")
# [END constraints]

    # [START objective]
    # Create the objective function
    profits = [310,380,350,285]
    objective = solver.Objective()
    for i in range(4):
        for j in range(3):
            objective.SetCoefficient(variables[i][j],profits[i])
    objective.SetMaximization()
    # [END objective]

    # [START solve]
    solver.Solve()
    # [END solve]

    # [START print_solution]
    print('Solution:')
    print('Objective value =', objective.Value())
    for i in range(4):
        for j in range(3):
            print(variables[i][j].name(),' = ', variables[i][j].solution_value())
    # [END print_solution]


if __name__ == '__main__':
    main()
# [END program]
