Last active
August 29, 2015 14:10
-
-
Save messa/8d3d118199189d39d917 to your computer and use it in GitHub Desktop.
MAS report LP
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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() | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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