如何将gam Gurobi吗?
回答你好,
我试图把Gurobi gam模型。在这里我附加更多的细节如下:
我已经转换设置参数、变量和表
功率=["褐煤”、“油”、“气”、“RES”)
负荷=[“基地”,“中间”,“峰”)
#π((电源、负载
)“单位负载类型的可用性”
π=[(“褐煤”、“基础”)(“褐煤”、“中间”)(“油”,“中间”)(“油”,“峰”)(“气”、“基础”)(“气”、“中间”)(“气”、“峰值”)
(“物”,“基地”),(“RES”、“峰值”)]
# es (p)“内生资源”
es =(“褐煤”、“RES”)
k =[“成本”、“CO2emission”、“内源性”)
#参数dir (k)“目标函数的方向”
/成本%最小值%,CO2emission %最小值%,内源性%马克斯% /
pheader =[“能力”,“成本”,“CO2emission”)
成本={"褐煤”:30,“油”:75年,“气”:60岁的“RES”: 90}
能力={"褐煤”:31000年,“油”:15000年,“气”:22000年,“RES”: 10000}
CO2emission ={"褐煤”:1.44,“油”:0.72,“气”:0.45,“RES”: 0}
mdl =模型(“权力”)
z = mdl.addVars (k, vtype = GRB.BINARY) #“目标函数变量”;
x = mdl。addVars(电力、负载、vtype = GRB.CONTINUOUS) #积极变量:生产、妇女的单位负荷地区的水平
这些是我需要把目标函数
*目标函数
# objcost最小化的目标成本在K美元”
objcost . .sum(π(功率、负载),pdata(“成本”,权力)* x (pi)) = e = z(成本);
# objco2 Kt的减少二氧化碳排放量的目标
objco2 . .sum(π(功率、负载),pdata (“CO2emission”、电力)* x (pi)) = e = z (“CO2emission”);
# obj的目标最大化内生来源、妇女的
obj . .sum(π(es、负载),x(π))= e = z(“内生”);
0
-
嗨,约翰,
你可以通过构建目标quicksum函数和setObjectiveN方法。
obj = mdl.setObjectiveN (gp。quicksum(x[e,l] for e in es for l in load), 0, 1)
obco2 = mdl.setObjectiveN (gp。quicksum(x[p,l]*CO2emission[p] for p in power for l in load), 1, 1)
obcost = mdl.setObjectiveN (gp。quicksum(x[p,l]*cost[p] for p in power for l in load), 2, 1)
mdl.write (“myLP.lp”)的写方法写一个人类可读的LP文件,您可以分析和检查是否你的结构是正确的。
请注意,您不需要额外的目标函数在Gurobi变量。
你可以找到如何使用的更多细节在文档中多个目标manbet体育手机客户端。
最好的问候,
Jaromił0 -
你好Jaromił,
感谢你的回放。如何设置模型有意义的目标。
这里的动机目的。objcost最小化的目标成本在K美元”
objco2对减少二氧化碳排放的目的
Kt”obj的目标最大化内生来源、妇女的
obj是最大化
obj = mdl。setObjectiveN (quicksum (x (e、l)的e l es的负载),伽马线暴。最大化,0,1)我有一个错误
GurobiError:客观指数必须是非负数
变量X是一个积极的变量和它生产水平的单位负荷地区妇女的;
0 -
嗨,约翰,
不可能设置优化的个人目标在处理多个目标。您可以最小化或最大化通过设置模型的所有目标ModelSense属性。
如果你想要一个目标最小化,最大化,你可以适当的目标函数乘以\ [1 \)。
最好的问候,
Jaromił0 -
你的意思是这样吗?
obj = mdl。setObjectiveN (quicksum (x (e、l)的e l es的负载)1,0,1)0 -
你不是乘以\(1 \)但从总数中减去\ (1 \)。我的意思是
obj = mdl。setObjectiveN (quicksum (1 * x [e、l] e l es的负载),0,1)
最好的问候,
Jaromił0 -
你好
我也需要你的帮助将Gurobi。
奥德:返回一组元素的相对位置。注意,奥德可以使用只有一维,静态的,命令集。更多细节,请参阅部分奥德操作符。
如何将这这家公司联欢吗?k1 (k) $(奥德(k) = 1) =是的;
km1 (k) =是的;
km1 (k1) = no;谢谢你!
0 -
嗨,约翰,
你可以得到一个元素的索引列表用指数函数,参见stackoverflow邮报找到列表中的一个元素的索引。
这可能有很好的Python教程帮助您将所有的社交功能转化为Python代码。
最好的问候,
Jaromił0
请登录留下你的评论。
评论
7评论