优化算法-整数规与多目标规划

简介: 优化算法-整数规与多目标规划

优化算法-整数规与多目标规划

整数规划

概念

全部变量限制为整数的规划问题,称为纯整数规划;
部分变量限制为整数的规划问题,称为混合整数规划;
变量只取0或1的规划问题,称为0-1整数规划。

整数规划问题,建议使用Lingo软件求解。

整数规划1.png

%{
   
   
Lingo变量界定函数实现对变量取值范围的附加限制,共4.
@bin(x)             限制x为01
@bnd((L,x,U)       限制L=<x<=U
@free(x)            取消对变量x的默认下界为0的限制,即x可以取任意实数
@gin(x)             限制x为整数
在默认情况下,LINGO规定变量是非负的,也就是说下界为0,上界为+0。
@free取消了默认的下界为0的限制,使变量也可以取负值。
@bnd用于设定一个变量的上下界,它也可以取消默认下界为0的约束。
%}

常用的整数规划问题解法有:

  1. 分枝定界法:可求纯或混合整数线性规划。
  2. 割平面法:可求纯或混合整数线性规划。
  3. 隐枚举法:用于求解0-1整数规划,有过滤法和分枝法。
  4. 匈牙利法:解决指派问题(0-1规划特殊情形)
  5. 蒙特卡罗法:求解各种类型规划。

例题

0-1规划

整数规划-_0-1规划_2.png

model:
    max = 3*x1-2*x2+5*x3;
    x1+2*x2-x3<=2;
    x1+4*x2+x3<=4;
    x1+x2<=3;
    4*x2+x3<=6;
    @ bin(x1);
    @ bin(x2);
    @ bin(x3);
end

%@bin(x)  限制x为01;

整数规划lingo2.png

整数规划

整数规划0.png
整数规划lingo1.png

model:
max = 5*x1+8*x2;
x1+x2<=6;
5*x1+9*x2<=45;
@ gin(x1);
@ gin(x2);
end

% @gin(x)   限制x为整数

蒙特卡罗法(随机取样法)

  1. 前面的方法,主要是针对线性整数规划而言,对于非线性整数规划没有通用的有效解法。
  2. 整数规划由于限制变量是整数,增加了求解难度,但整数解是有限个,所以可以采用枚举法。
  3. 当枚举个数很多时,显性枚举是不现实的,但利用蒙特卡罗随机取样法,在一定的计算量下是可以得到满意解的。
  4. 注意点 通常使用lingo处理规划问题,matlab虽然也能够解决问题,都是没有lingo效果好。
    非线性整数规划1.png
    lingo的一些概念
    lingo 生成一维矩阵.png
    ```c
    %sets集合
    sets:
    row/1..4/:b;
    col/1..5/:c1,c2,x;
    link(row,col):a;
    endsets

% row生成1x4的矩阵b,col生成1x5的矩阵c1,c2,x;
% link(A,B):VAR; %!VAR就是一个AB的矩阵;
% 生成一个row
col的矩阵 记作a

% 数据
data:
c1 = 1,1,3,4,2;
c2 = -8,-2,-3,-1,-2;
a = 1 1 1 1 1
1 2 2 1 6
2 1 6 0 0
0 0 1 1 5;
b=400,800,200,200;
enddata

%规划解答 集合

max = @sum(col:c1x^2+c2x);
@for(row(i):@sum(col(j):a(i,j)*x(j))<=b(i));
@for(col:@gin(x));
@for(col:@bnd(0,x,99));

##### 例题lingo代码
```c
model:

!集合sets;

sets:
    row/1..4/:b;
    col/1..5/:c1,c2,x;
    link(row,col):a;
endsets

!数据源data;


data:
c1 = 1,1,3,4,2;
c2 = -8,-2,-3,-1,-2;
a = 1 1 1 1 1
    1 2 2 1 6
    2 1 6 0 0
    0 0 1 1 5;
b=400,800,200,200;
enddata

max  = @sum(col:c1*x^2+c2*x);
@for(row(i):@sum(col(j):a(i,j)*x(j))<=b(i));
@for(col:@gin(x));
@for(col:@bnd(0,x,99));

end


!@sum(setname:expression_list) 其中 setname 是要遍历的集合  expression_list是表达(完成函数表达式的编写) 有且仅有一个 sum进行求和操作
max  = @sum(col:c1*x^2+c2*x)  %目标函数
@for(row(i):@sum(col(j):a(i,j)*x(j))<=b(i))  %Ax<=b的约束条件   
!@for(setname:expression_list)  for循环
@for(col:@gin(x))  %对于col集合的元素进行循环操作,@gin(x) 元素都是整数
@for(col:@bnd(0,x,99))  %对于col集合的元素进行循环操作  bnd(low,x,up)限制范围
;

非线性整数规划lingo.png

多目标规划

目录
相关文章
|
6天前
|
存储 监控 NoSQL
Redis处理大量数据主要依赖于其内存存储结构、高效的数据结构和算法,以及一系列的优化策略
【5月更文挑战第15天】Redis处理大量数据依赖内存存储、高效数据结构和优化策略。选择合适的数据结构、利用批量操作减少网络开销、控制批量大小、使用Redis Cluster进行分布式存储、优化内存使用及监控调优是关键。通过这些方法,Redis能有效处理大量数据并保持高性能。
25 0
|
3天前
|
算法 决策智能
如何用算法规划完美的相亲假期 - 小美的春节排班挑战
排班是一个经典的组合优化问题,而相亲排班可谓是它的一种别出心裁的应用。小美的挑战在于,如何在有限的8天空闲时间内,安排至少12场有效的相亲,并且满足诸如“父母严选”和通勤时间等一系列复杂的条件。
|
3天前
|
算法
MATLAB|【免费】融合正余弦和柯西变异的麻雀优化算法SCSSA-CNN-BiLSTM双向长短期记忆网络预测模型
这段内容介绍了一个使用改进的麻雀搜索算法优化CNN-BiLSTM模型进行多输入单输出预测的程序。程序通过融合正余弦和柯西变异提升算法性能,主要优化学习率、正则化参数及BiLSTM的隐层神经元数量。它利用一段简单的风速数据进行演示,对比了改进算法与粒子群、灰狼算法的优化效果。代码包括数据导入、预处理和模型构建部分,并展示了优化前后的效果。建议使用高版本MATLAB运行。
|
5天前
|
资源调度 算法 块存储
m基于遗传优化的LDPC码OMS译码算法最优偏移参数计算和误码率matlab仿真
MATLAB2022a仿真实现了遗传优化的LDPC码OSD译码算法,通过自动搜索最佳偏移参数ΔΔ以提升纠错性能。该算法结合了低密度奇偶校验码和有序统计译码理论,利用遗传算法进行全局优化,避免手动调整,提高译码效率。核心程序包括编码、调制、AWGN信道模拟及软输入软输出译码等步骤,通过仿真曲线展示了不同SNR下的误码率性能。
10 1
|
5天前
|
算法 Serverless
m基于遗传优化的LDPC码NMS译码算法最优归一化参数计算和误码率matlab仿真
MATLAB 2022a仿真实现了遗传优化的归一化最小和(NMS)译码算法,应用于低密度奇偶校验(LDPC)码。结果显示了遗传优化的迭代过程和误码率对比。遗传算法通过选择、交叉和变异操作寻找最佳归一化因子,以提升NMS译码性能。核心程序包括迭代优化、目标函数计算及性能绘图。最终,展示了SNR与误码率的关系,并保存了关键数据。
19 1
|
5天前
|
算法 调度
考虑需求响应的微网优化调度模型【粒子群算法】【matlab】
考虑需求响应的微网优化调度模型【粒子群算法】【matlab】
|
6天前
|
算法 调度
基于多目标粒子群算法冷热电联供综合能源系统运行优化(matlab代码)
基于多目标粒子群算法冷热电联供综合能源系统运行优化(matlab代码)
|
5天前
|
算法
【免费】面向多微网网络结构设计的大规模二进制矩阵优化算法
【免费】面向多微网网络结构设计的大规模二进制矩阵优化算法
|
5天前
|
算法 调度
【问题探讨】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究
【问题探讨】基于非支配排序的蜣螂优化算法NSDBO求解微电网多目标优化调度研究
|
5天前
|
算法
视频讲解|基于多目标粒子群算法的配电网储能选址定容
视频讲解|基于多目标粒子群算法的配电网储能选址定容