机组组合问题求解结果全是0

最近自学机组组合,在matlab中用yalmip+cplex进行优化求解。目前属于初学状态,写了一些代码,但运行出来结果全是0,自己检查半天一头雾水,请问一般求解结果全是0可能是在什么地方出现问题了呢?
这是设置的变量

x1=binvar(NG,T,'full');%代表转换状态量1:由开机到停机
y1=binvar(NG,T,'full');%代表转换变量1:由停机到开机
z1=binvar(NG,T,'full');%启停状态1:开机
PG1=sdpvar(NG,T,'full');%风电场景下发电机出力
PG1_up=sdpvar(NG,T,'full');%发电机上调备用容量出力
PG1_down=sdpvar(NG,T,'full');%发电机下调备用容量出力
Cw1=sdpvar(1,T,'full');%系统切风变量
Cwr1=sdpvar(1,T,'full');%系统下调备用容量切风电量

这里是自己写的约束部分

cons=[];%初始化
%% 1.功率平衡约束
CW1=Cw1';
cons=[cons,sum(PG1)'+Pw_fwst-CW1==D];
% cons=[cons,sun(PG2,2)+Pwk_fwst-Cwr2==D];
%% 2.备用容量约束
cons=[cons,sum(PG1_up)'+Pw_fwst==D+repmat(Rup,1,T)'];
cons=[cons,sum(PG1_down)'+Pw_fwst-CW1==D-repmat(Rdown,1,T)'];
%% 3.备用爬坡速率约束
cons=[cons,
    PG1_up-PG1<=detat*repmat(rud,1,T),
    PG1_down-PG1<=detat*repmat(rud,1,T)
    ];
%% 4.机组出力限制
cons=[cons,
    z1.*repmat(Pgmin,1,T)<=PG1<=z1.*repmat(Pgmax,1,T),
    z1.*repmat(Pgmin,1,T)<=PG1_up,
    PG1_down<=z1.*repmat(Pgmax,1,T)
    ];
%% 5.机组爬坡速率限制
cons=[cons,abs([PG1(:,2:end),PG1(:,1)]-PG1)<=detat*repmat(rud,1,T)];
%% 6.切风量限制
cons=[cons,
    Cwr1'<=Pw_fwst
%     Cw2<=Pwk_fwst
       ];
%% 7.机组启停限制
cons=[cons,x1<=abs([z1(:,2:end),z1(:,1)]-z1)<=y1];%不太确定是否需要加绝对值
%% 8.机组最小运行时间限制
%% 9.机组最小停机时间限制
for i=1:6
    for t=1:T 
    cons=[cons,
            consequtiveON([OnOff_history z1(i,:)],On_min),
            consequtiveON(1-[OnOff_history z1(i,:)],Off_min)
        ];
 end   
end

根据提供的代码和问题描述,我们可以看到你定义了一些变量和约束,并使用Yalmip和Cplex进行求解。但是你得到的结果全是0,可能是以下几个环节出现了问题:

  1. 变量设置:检查一下定义的变量是否符合你的需求,例如变量类型、维度、取值范围等。确保你所定义的变量可以满足问题的要求。

  2. 约束设置:检查一下定义的约束是否正确,确保约束条件涵盖了你要求的问题。在你提供的代码中,约束cons的内容并不完整,可能还有其他未提及的约束。

  3. 目标函数设置:检查一下目标函数是否正确,确保你所定义的目标函数与你的问题相匹配。在你提供的代码中,我们并没有看到明确的目标函数。

  4. 求解器设置:你使用的是Cplex求解器,在使用之前,你需要确保已经正确安装了Cplex,并将其设置为目标求解器。此外,还要确保你已经正确设置了Cplex的路径和许可证。

请尝试改正上述环节中的问题,并重新运行代码,看看是否能够得到正确的求解结果。如果问题仍然存在,请提供更多的代码和信息,以便我们更好地帮助你解决问题。