使用nsga-2(gamultiobj)实现matlab多目标规划

该文详细介绍了如何在MATLAB中使用gamultiobj函数结合NSGA-II算法解决多目标优化问题,包括线性规划和非线性规划的情况。文中提到了函数参数设置、目标函数和约束条件的定义,以及适应度函数和非线性约束函数的编写方法。

gamultiobj函数基本知识点

在这里插入图片描述

  • fun代表的是目标函数

  • nvars代表的是待求变量的个数

  • A为不等式约束的系数项

  • b为不等式约束的常数项

  • Aeq为等式约束的系数项

  • beq为等式约束的常数项

  • lb和ub为变量x取值的上下限

  • 其中非线性等式约束和不等式约束需要创建函数来进行带入,对应上述中的使用部分为nonlcon

  • 在此需要注意一下,这个函数是求目标函数的最小值,如果是最大值时需要装换为求最小值,下面的约束条件也要注意转换。

使用NSGA-II(gamultiobj)求解多目标优化算法-线性规划

% 清除所有变量(非必须)
clc,clear

%% 模型设置
% 获取目标函数的函数句柄
fun = @fitnessfun; % 设置适应度函数句柄
% 变量个数
nvars=4;
% 约束条件形式1:上下界约束(若无取空数组[])
% lb<= X <= ub
lb=[0,0,0,0];
ub=[];

% 约束条件形式2:线性规划不等式约束(若无取空数组[])
% A*X <= b 
A = [0    0 1 1
    -1/3  0 0 0
     0 -1/2 0 0
     0 0 0 0];

b = [48 ; 30 ; 30 ; 0];

% 约束条件形式3:等式约束(若无取空数组[])
% Aeq*X = beq
Aeq=[1 1 0 0;0 0 0 0; 0 0 0 0; 0 0 0 0];
beq=[120;0;0;0];

%% 求解器设置
% 最优个体系数paretoFraction
% 种群大小populationsize
% 最大进化代数generations
% 停止代数stallGenLimit
% 适应度函数偏差TolFun
% 函数gaplotpareto:绘制Pareto前沿 
options=gaoptimset('paretoFraction',0.3,'populationsize',200,'generations',300,'stallGenLimit',200,'TolFun',1e-10,'PlotFcns',@gaplotpareto);

%% 主求解
[x,fval]=gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,options)
function f=fitnessfun(x)
% f是目标函数向量
% gamultiobj是以目标函数分量取极小值为目标,极大值的目标函数注意取相反数
f(1)=-(x(1)*100/3 + x(3)*90/3  + x(2)*80/2+x(4)*70/2);
f(2)=x(3)+x(4);
end

使用NSGA-II(gamultiobj)求解多目标优化算法-非线性规划

在这里插入图片描述

clc;clear;
%% 模型设置
%% 求解器设置
% 最优个体系数paretoFraction
% 种群大小populationsize
% 最大进化代数generations
% 停止代数stallGenLimit
% 适应度函数偏差TolFun
% 函数gaplotpareto:绘制Pareto前沿 
options=gaoptimset('paretoFraction',0.3,'populationsize',200,'generations',300,'stallGenLimit',200,'TolFun',1e-10,'PlotFcns',@gaplotpareto);
fun = @fitnessfun; % 设置适应度函数句柄
nonlcon = @nonlconfun; % 设置非线性约束函数句柄
nvars = 4; % 自变量个数
%% 线性规划系数和右端列向量
A = [];  
b = [];
Aeq = [];  
beq = [];
%% 自变量上下界
lb = [2;17;17;17];  
ub = [];
%% 主求解
[x,fval]=gamultiobj(fun,nvars,A,b,Aeq,beq,lb,ub,nonlcon,options)
function f = fitnessfun(x)
% 目标函数:多目标
f(1) = pi/60*x(1)*(2*x(3)+x(4))
f(2) = pi/2*x(1)^2*x(3)*x(4);   
end
function [c,ceq] = nonlconfun(x)
	% 非线性约束:c即不等式约束的函数值,是列向量(可以存在多个约束)。ceq即等式约束函数的函数值,同样是列向量(可以存在多个约束)
    % x:为自变量的行向量
    % c:非线性不等式约束的函数值.
    % ceq:非线性等式约束的函数值.   
     c(1,1) = x(1)*(x(2)-x(4));
     c(2,1) = 3.222*10^9/(x(1)^3*x(2)*(2*x(3)+x(4)))-450;
     c(3,1) = x(1)*(x(4)-pi*x(3));
     ceq(1,1)=pi*(2*x(1)*x(3)+x(4))-3000;  
end

参考文献

MATLAB遗传算法工具箱的使用及实例(非线性规划)
其中ga函数得调用只能使用一个目标函数,不适合多目标规划
【MATLAB】多目标优化算法 NSGA-II (gamultiobj) 的使用
Matlab利用NSGA2算法求解多目标优化

内容概要:本文详细记录了对一个Android ARM64静态ELF文件中字符串加密机制的逆向分析过程。该ELF文件的所有字符串均被加密,无法通过常规strings命令或IDA直接识别。作者通过分析发现,加密字符串存储在.rodata段,其解密所需信息(包括密文地址、长度和16位密钥)保存在.data.rel.ro段的40字节描述符中。核心解密函数sub_10F408采用自反的双pass流密码算法,结合固定密钥KEY_TERM(由.data段24字节数据计算得出),实现字节级非线性、位置长度相关的加密。文章还复现了完整的Python解密脚本,并揭示了该保护机制的本质为代码混淆而非强加密,最终成功批量解密全部956条字符串,暴露程序真实行为,如shell命令模板、设备标识篡改、网络重置等操作。此外,文中还提及未启用的自定义壳框架及其反dump设计。; 适合人群:具备逆向工程基础的安全研究人员、二进制分析人员及对ELF保护技术感兴趣的开发者。; 使用场景及目标:①学习ELF二进制中字符串加密的典型实现方式逆向突破口;②掌握从结构识别、函数追踪到算法还原的完整逆向流程;③理解“绑定二进制”的完整性校验设计及其局限性;④实践编写IDAPython脚本自动化提取解密敏感数据。; 阅读建议:此资源以实战案例驱动,不仅展示技术细节,更强调逆向思维验证方法,建议读者结合IDA调试环境,逐步跟随文中步骤进行动态分析算法验证,深入理解每一步的推理依据。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值