关于matlab基于问题求解非线性整数&&等式约束规划问题报错问题:

问题背景如下

clc,clear;
prob=optimproblem('ObjectiveSense','max');
%限定自变量的类型为整数
x=optimvar('x',4,1,'Type','integer','LowerBound',-1,'UpperBound',1);
c=[6,8,4,2];
Q=[-1,2,0,0;
    2,-1,2,0;
    0,2,-1,2;
    0,0,2,-1];
prob.Objective=c*x+0.5*x'*Q*x;
con=optimconstr(4);
con(1)=x(1)*x(2)+x(3)*x(4)<=1;
con(2)=-1<=x(1)*x(2)+x(3)*x(4);
con(3)=sum(x)<=2;
con(4)=-3<=sum(x);
show(con)

prob.Constraints.con=con;
prob.Constraints.con1=x.^2-1==0;%在这里给出了等式约束
x0.x=rand(4,1);
[s,f,exitflag]=solve(prob,x0),s.x

这样运行会报错

错误使用 optim.problemdef.OptimizationProblem/solve
GA does not solve problems with integer and equality constraints.
For more help see No Equality Constraints in the documentation.

主要是遗传算法(ga)无法用在整数问题和等式约束并存的情况,因此只能将第4行代码改为

x=optimvar('x',4,1,'LowerBound',-1,'UpperBound',1);

也就是说把整数约束去掉,就可以得出结果,但是必须得多次运行才能得到最优解,不知道有没有大佬有解决整数问题和等式约束并存的情况

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Matlab中可以使用`intlinprog`函数来解决非线性规划整数约束问题。`intlinprog`函数的使用方法如下: ```matlab [x,fval,exitflag,output] = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub,options) ``` 其中,`f`是目标函数的系数矩阵,`intcon`是整数决策变量的索引向量,`A`和`b`分别是线性不等式约束的系数矩阵和常数向量,`Aeq`和`beq`分别是线性等式约束的系数矩阵和常数向量,`lb`和`ub`分别是决策变量的下界和上界向量,`options`是求解器选项。 下面是一个简单的例子,演示如何使用`intlinprog`函数解决非线性规划整数约束问题: ```matlab % 目标函数系数矩阵 f = [-2; -3; -5]; % 不等式约束条件系数矩阵 A = [3 2 1; 2 5 3; 1 2 2]; b = [10; 15; 8]; % 整数决策变量的索引向量 intcon = [1; 2; 3]; % 求解器选项 options = optimoptions('intlinprog','Display','off'); % 求解问题 [x,fval,exitflag,output] = intlinprog(f,intcon,A,b,[],[],zeros(3,1),[],options); % 输出结果 fprintf('最小值: %f \n', fval); fprintf('x1: %d \n', x(1)); fprintf('x2: %d \n', x(2)); fprintf('x3: %d \n', x(3)); ``` 这里的例子中,我们要求解问题是: $$ \begin{aligned} \min_{x_1,x_2,x_3} \quad & -2x_1 - 3x_2 - 5x_3 \\ \text{s.t.} \quad & 3x_1 + 2x_2 + x_3 \leq 10 \\ & 2x_1 + 5x_2 + 3x_3 \leq 15 \\ & x_1 + 2x_2 + 2x_3 \leq 8 \\ & x_1,x_2,x_3 \in \mathbb{Z}^+ \\ \end{aligned} $$ 运行上面的Matlab代码,可以得到最小值和相应的决策变量取值。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值