MATLAB+Gurobi/Cplex Installation &Test

9 篇文章 ¥399.90 ¥499.90

1. 软件install

1.1 Yalmip

Yalmip是一个开源的MATLAB库,其作用简单来说是一个”翻译官“,用于统一不同求解器和不同问题的建模方式。由于一台电脑上可能会安装有多种求解器,另外求解的问题也有很多种类(例如LP,ILP,MILP,QP,MIQP等等),不同的问题需要在不同的求解器上进行求解,而不同的求解器的语法都不同,这就带来了较大的学习成本。Yalmip就是针对该问题的一个非常强大的工具,可以用非常简单通用的语法来对你的问题进行建模。随后,Yalmip会自动识别你的模型属于的类别(比如到底是MILP还是QP等等),然后根据模型的类别选择最合适的求解器,并将你的模型自动转换成该求解器所能识别的格式进行求解。因此,有了Yalmip后,你所需要做的,就是建模、选择求解器(或者让Yalmip自动帮你选),然后提取求解结果即可。

Yalmip官网下载地址:

https://link.zhihu.com/?target=https%3A//yalmip.github.io/download/

将Yalmip-master 解压后加入到MATLAB检索路径(可自定义,最后在MATLAB安装路径下)

1.2 Gurobi v10.0.1 In MATLAB

Gurobi是一款功能强大且高效的数学优化工具,广泛应用于线性规划(Linear Programming, LP)、混合整数规划(Mixed Integer Programming, MIP)等领域。Gurobi因其出色的性能、易用性和强大的功能集而在学术界及工业界享有盛誉。

Gurobi优化器特点 :

1. 高效求解能力:Gurobi以其快速求解线性和混合整数规划问题而闻名,能够处理大规模问题并在合理的时间内提供高质量解决方案。

2. 多语言支持:Gurobi提供了多种编程语言接口,包括C、C++、Java、.NET(C#)和Python等,方便不同背景的开发者使用。

3. 易于安装和配置:Gurobi提供了详尽的文档和支持材料,帮助用户轻松完成安装过程,并通过示例代码快速上手。

4. 高级功能:除了基本的优化功能外,Gurobi还支持复杂的约束条件和目标函数定制,满足特定应用需求。

对于**版Gurobi,解压后运行安装"Gurobi-10.0.1-win64.msi", 然后运行注册机,出现以下提示安装成功。

完成Gurobi的注册安装和激活后,在MATLAB中,将gurobi的路径添加至matlab即可完成配置。目录为Gurobi根目录\win64\matlab

1.3 Gurobi In Pycharm

Gurobi在Pycharm中的配置参见一下博客

如何在python中安装Gurobi(详细教程)_Alano_bei-GitCode 开源社区

2.代码测试

2.1 MATLAB 2022b

% Written by @MMiL
% 2024.08.13

clc;clear;
C = [3 8 2 10;9 7 5 3;1 5 4 3;4 5 7 9];
% 定义变量
x = binvar(4, 4, 'full');
% 定义约束条件
cons = [sum(x, 1) == 1; sum(x, 2) == 1];
% 定义目标函数
cost = x .* C;
Obj = sum(cost(:));
% 进行优化
ops = sdpsettings('solver', 'gurobi');
result = optimize(cons, Obj, ops);
% 输出结果
a=value(x);
value(Obj)

2.2 Pycharm

# Written by @MMiL
# 2024.08.13

from gurobipy import *
import random
# 数据
N = 3
random.seed(1)
T = {(i, j): random.randint(0, 100) for i in range(N) for j in range(N)}
C = {(i, j): random.randint(0, 100) for i in range(N) for j in range(N)}
# 模型
model = Model('assignment')
# 添加变量
x = model.addVars([(i, j) for i in range(N) for j in range(N)], vtype='B', name='x')
# 目标函数
model.setObjectiveN(x.prod(T), index=0, weight=0.1, name='Time Objective')
model.setObjectiveN(x.prod(C), index=1, weight=0.5, name='Cost Objective')
# 约束
model.addConstrs(((quicksum(x[i, j] for i in range(N)) == 1) for j in range(N)), name='Job Constraingt')
model.addConstrs(((quicksum(x[i, j] for j in range(N)) == 1) for i in range(N)), name='Worker Constraingt')
# 求解
model.Params.OutputFlag = 0
model.optimize()
# 输出
for i in range(model.NumObj):
    model.setParam('ObjNumber', i)
    print('Obj{}:'.format(i), model.objVal)
for i in range(N):
    for j in range(N):
        if x[i, j].x > 0:
            print('job {}-->worker {}'.format(j + 1, i + 1))
model.write('assignment.lp')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@Liooo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值