gurobi中的lp

1、没有办法,要用到optimization solver 求解, 还好gurobi的例子 还是不错的,会有pdf说明。但是,每隔一段时间就会忘记,因此做个记录。

2、gurobi的优势,是给出接口,用其他语言对接,这里 主要用两种 matlab 和 python 语言,先说一下matlab的用法。

3、有两种定义方式: 直接定义,或者根据运输问题的定义。因为运输问题的比较特殊,因此有另外一种形式的定义。先看一般的直接定义,主要是把model的相关属性定义好,下面整理一下。

4、模型名称 model.modelname = ‘facility’; 自己设置一个名称,保存的时候,就知道是什么模型了。

5、变量的类型 model.vtype ,如果都是一种类型,直接设置 model.vtype = ‘B’; 如果是不同的类型,那么就要分开设置,如 model.vtype = [repmat(‘B’, nPlants, 1); repmat(‘C’, nPlants * nWarehouses, 1)];

6、变量名 model.varnames ,可以直接写出来 ,如 model.varnames = {‘x’; ‘y’; ‘z’} 定义了 3个变量。如果是运输问题的话,那么定义的变量 是 trans1,1 trans1,2 trans2,1 trans2,2 这种形式, 可以 用如下的方式定义:

for p = 1:nPlants
model.varnames{p} = sprintf(‘Open%d’, p);
end

for w = 1:nWarehouses
for p = 1:nPlants
v = flowidx(w, p); % flowidx = @(w, p) nPlants * w + p;
model.varnames{v} = sprintf(‘Trans%d,%d’, w, p);
end
end
上面的这段代码,要好好领悟,因为可以转变成你的代码。变量名有先后顺序的,因此顺序很重要(在运输问题中)

这段需要锻炼一下,保留代码,留着以后用。

6、约束名称 model.constrnames,和变量名称一样的方式,先不详细说明。

7、系数矩阵的输入,包括A, rhs 和 obj。
系数矩阵的输入,matlab采用的稀疏矩阵,用的是sparse(必须要用这种方式),这样节省内存空间(0元素比较多的时候)。可以采用手动输入,或者在运输问题(有规律的)的时候,循环输入。不管采用哪种方式,心中的那个A矩阵一定要清楚,手动输入的话,也可以采用从excel导入的方式。

注意:obj的是纵向的向量,obj是横向的向量。

8、保存模型 gurobi_write(model, ‘mymip.lp’);

9、其他的设置。 包括约束的方向 model.sense,大于,小于 或者 等于 ; 目标函数的 min 或者max model.modelsense

10、设置参数 params ,然后运行 result = gurobi(model, params);,这个东西只能靠积累啊,用的多的就经常用,控制结果

11、保存输出 。 将结果放在result里面,一般关联两个主要的属性 x和objval ,然后 看怎么把这结果放到txt里面,或者excel里面去。

结束。。。。。。

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值