Skip to content

Instantly share code, notes, and snippets.

@messa
Last active August 29, 2015 14:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save messa/8d3d118199189d39d917 to your computer and use it in GitHub Desktop.
Save messa/8d3d118199189d39d917 to your computer and use it in GitHub Desktop.
MAS report LP
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# PuLP is an LP modeler written in Python.
# PuLP can generate MPS or LP files and call GLPK, COIN CLP/CBC, CPLEX,
# and GUROBI to solve linear problems.
import pulp
from pulp import (
LpMaximize,
LpMinimize,
LpProblem,
LpVariable,
LpStatus,
value,
)
def main():
# https://cw.felk.cvut.cz/wiki/_media/courses/ae4m36mas/report_fixed.pdf
mas_report_agent()
mas_report_bandita()
def mas_report_agent():
print "mas_report_agent:"
r = LpVariable("r", 0, 1)
v_I20 = LpVariable("v_I20", 0, 100)
v_I21 = LpVariable("v_I21", 0, 100)
v_I21 = LpVariable("v_I21", 0, 100)
r_UI11 = LpVariable("r_UI11", 0, 1)
r_UI11_UI12 = LpVariable("r_UI11_UI12", 0, 1)
r_UI11_UI12_RI13 = LpVariable("r_UI11_UI12_RI13", 0, 1)
r_UI11_UI12_RI13_RI14 = LpVariable("r_UI11_UI12_RI13_RI14", 0, 1)
r_UI11_UI12_RI15 = LpVariable("r_UI11_UI12_RI15", 0, 1)
r_UI11_UI12_RI15_RI16 = LpVariable("r_UI11_UI12_RI15_RI16", 0, 1)
r_RI11 = LpVariable("r_RI11", 0, 1)
r_RI11_RI17 = LpVariable("r_RI11_RI17", 0, 1)
r_RI11_RI17_UI18 = LpVariable("r_RI11_RI17_UI18", 0, 1)
r_RI11_RI17_UI18_UI19 = LpVariable("r_RI11_RI17_UI18_UI19", 0, 1)
r_RI11_RI17_UI10 = LpVariable("r_RI11_RI17_UI10", 0, 1)
r_RI11_RI17_UI10_UI11 = LpVariable("r_RI11_RI17_UI10_UI11", 0, 1)
prob = LpProblem("mas_report_agent", LpMaximize)
prob += v_I20, "objective"
prob += v_I20 <= v_I21, "-"
prob += v_I21 <= 5 * r_UI11_UI12_RI13_RI14 \
+ 11 * r_RI11_RI17_UI18_UI19, "E1"
prob += v_I21 <= 5.5 * r_RI11_RI17_UI10_UI11 \
+ 10 * r_UI11_UI12_RI15_RI16, "E2"
prob += r == 1
prob += r == r_UI11 + r_RI11
prob += r_UI11 == r_UI11_UI12
prob += r_UI11_UI12 == r_UI11_UI12_RI13
prob += r_UI11_UI12_RI13 == r_UI11_UI12_RI13_RI14
prob += r_UI11_UI12 == r_UI11_UI12_RI15
prob += r_UI11_UI12_RI15 == r_UI11_UI12_RI15_RI16
prob += r_RI11 == r_RI11_RI17
prob += r_RI11_RI17 == r_RI11_RI17_UI18
prob += r_RI11_RI17_UI18 == r_RI11_RI17_UI18_UI19
prob += r_RI11_RI17 == r_RI11_RI17_UI10
prob += r_RI11_RI17_UI10 == r_RI11_RI17_UI10_UI11
status = prob.solve(pulp.GLPK(msg=0))
assert LpStatus[status] == "Optimal"
print " game value:", value(v_I20)
print " r_UI11:", value(r_UI11)
print " r_RI11:", value(r_RI11)
assert value(v_I20) == 7.85714
def mas_report_bandita():
print "mas_report_bandita:"
v_20 = LpVariable("v_20", -100, 100)
v_11 = LpVariable("v_11", -100, 100)
v_12 = LpVariable("v_12", -100, 100)
v_13 = LpVariable("v_13", -100, 100)
v_14 = LpVariable("v_14", -100, 100)
v_15 = LpVariable("v_15", -100, 100)
v_16 = LpVariable("v_16", -100, 100)
v_17 = LpVariable("v_17", -100, 100)
v_18 = LpVariable("v_18", -100, 100)
v_19 = LpVariable("v_19", -100, 100)
v_110 = LpVariable("v_110", -100, 100)
v_111 = LpVariable("v_111", -100, 100)
r = LpVariable("r", 0, 1)
r_E1 = LpVariable("r_E1", 0, 1)
r_E2 = LpVariable("r_E2", 0, 1)
prob = LpProblem("mas_report_bandita", LpMaximize)
prob += v_20, "objective"
prob += v_20 <= v_11, "-"
prob += v_11 <= v_12, "U11"
prob += v_12 <= 0 + v_13 + v_15, "U11_U12"
prob += v_13 <= v_14, "U11_U12_R13"
prob += v_14 <= -5 * r_E1, "U11_U12_R13_R14"
prob += v_15 <= v_16, "U11_U12_R15"
prob += v_16 <= -10 * r_E2, "U11_U12_R15_R16"
prob += v_11 <= v_17, "R11"
prob += v_17 <= 0 + v_18 + v_110, "R11_R17"
prob += v_18 <= v_19, "R11_R17_U18"
prob += v_19 <= -11 * r_E1, "R11_R17_U18_U19"
prob += v_110 <= v_111, "R11_R17_U110"
prob += v_111 <= -5.5 * r_E2, "R11_R17_U110_U111"
prob += r == 1
prob += r == r_E1 + r_E2
status = prob.solve(pulp.GLPK(msg=0))
assert LpStatus[status] == "Optimal"
print " game value:", value(v_20)
print " r_E1:", value(r_E1)
print " r_E2:", value(r_E2)
assert value(v_20) == -7.85714
if __name__ == "__main__":
main()
mas_report_agent:
game value: 7.85714
r_UI11: 0.52381
r_RI11: 0.47619
mas_report_bandita:
game value: -7.85714
r_E1: 0.428571
r_E2: 0.571429
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment