用yalmip+Gurobi求解线性规划,无法求解到最优解,用check函数显示不满足约束,请帮我看看代码哪里有问题,请不要用chatgpt或者文心一言的回答。代码如下:
clear
close all
clc
warning('off','YALMIP:SuspectNonSymmetry');
m=9;
F11=[0.5 0.71 0.34 0.04 0.57 0.58 0.3 0.21 0.28;
0.29 0.5 0.77 0.92 0.62 0.61 0.78 0.53 0.68;
0.66 0.23 0.5 0.81 0.63 0.45 0.5 0.36 0.04;
0.96 0.08 0.19 0.5 0.33 0.6 0.64 0 0.81;
0.43 0.38 0.37 0.67 0.5 0.63 0.07 0.51 0.91;
0.42 0.39 0.55 0.4 0.37 0.5 0.1 0.36 0.22;
0.7 0.22 0.5 0.36 0.93 0.9 0.5 0.22 0.94;
0.79 0.47 0.64 1 0.49 0.64 0.78 0.5 0.43;
0.72 0.32 0.96 0.19 0.09 0.78 0.06 0.57 0.5]; % DM1中第1个相关者的原始决策矩阵
F12=[0.5 0.83 0.99 0.87 0.22 0.77 0.78 0.82 0.25
0.17 0.5 0.46 0.87 0.6 0.09 0.37 0.32 0.08
0.01 0.54 0.5 0.35 0.63 0.99 0.66 0.18 0.39
0.13 0.13 0.65 0.5 0.52 0.91 0.47 0.3 0.79
0.78 0.4 0.37 0.48 0.5 0.77 1 0.28 0.91
0.23 0.91 0.01 0.09 0.23 0.5 0.06 0.62 0.5
0.22 0.63 0.34 0.53 0 0.94 0.5 0.52 0.29
0.18 0.68 0.82 0.7 0.72 0.38 0.48 0.5 0.44
0.75 0.92 0.61 0.21 0.09 0.5 0.71 0.56 0.5];% DM1中第2个相关者的原始决策矩阵
F13=[0.5 0.88 0.46 0.82 0.48 0.88 0.95 0.42 0.77;
0.12 0.5 0.94 0.88 0.37 0.7 0.26 0.28 0.11;
0.54 0.06 0.5 0.62 0.49 0.47 0.72 0.71 0.7;
0.18 0.12 0.38 0.5 0.74 0.54 0.54 0.63 0.35;
0.52 0.63 0.51 0.26 0.5 0.02 0.03 0.36 0.71;
0.12 0.3 0.53 0.46 0.98 0.5 0.72 0.49 0.69;
0.05 0.74 0.28 0.46 0.97 0.28 0.5 0.35 0.35;
0.58 0.72 0.29 0.37 0.64 0.51 0.65 0.5 0.98;
0.23 0.89 0.3 0.65 0.29 0.31 0.65 0.02 0.5];% DM1中第3个相关者的原始决策矩阵
F21=[0.5 0.43 0.21 0.28 0.54 0.7 0.17 0.58 0.28;
0.57 0.5 0.58 0.97 0.07 0.29 0.02 0.11 0.66;
0.79 0.42 0.5 0.4 0.42 0.26 0.29 0.99 0.7;
0.72 0.03 0.6 0.5 0.36 0.97 0.28 0.92 0.05;
0.46 0.93 0.58 0.64 0.5 0.3 0.46 0.53 0.28;
0.3 0.71 0.74 0.03 0.7 0.5 0.7 0.01 0.25;
0.83 0.98 0.71 0.72 0.54 0.3 0.5 0.95 0.74;
0.42 0.89 0.01 0.08 0.47 0.99 0.05 0.5 0.65;
0.72 0.34 0.3 0.95 0.72 0.75 0.26 0.35 0.5]; % DM2中第1个相关者的原始决策矩阵
F22=[0.5 0.07 0.95 0.19 0.44 0.49 0.08 0.81 0.77;
0.93 0.5 0.25 0.09 0.49 0.25 0.83 0.28 0.29;
0.05 0.75 0.5 0.07 0.15 0.1 0.33 0.62 0.83;
0.81 0.91 0.93 0.5 0.43 0.35 0.89 0.47 0.68;
0.56 0.51 0.85 0.57 0.5 0.01 0.94 0.98 0.32;
0.51 0.75 0.9 0.65 0.99 0.5 0.05 0.41 0.24;
0.92 0.17 0.67 0.11 0.06 0.95 0.5 0.41 0.05;
0.19 0.72 0.38 0.53 0.02 0.59 0.59 0.5 0.51;
0.23 0.71 0.17 0.32 0.68 0.76 0.95 0.49 0.5]; % DM2中第2个相关者的原始决策矩阵
F23=[0.5 0.31 0.23 0.4 0.75 0.93 0.38 0.44 0.21;
0.69 0.5 0.41 0.98 0.7 0.93 0.76 0.12 0.04;
0.77 0.59 0.5 0.55 0.78 0.09 0.81 0.91 0.25;
0.6 0.02 0.45 0.5 0.83 0.3 0.28 0.94 0.21;
0.25 0.3 0.22 0.17 0.5 0.71 0.04 0.1 0.13;
0.07 0.07 0.91 0.7 0.29 0.5 0.3 0.4 0.02;
0.62 0.24 0.19 0.72 0.96 0.7 0.5 0.34 0.57;
0.56 0.88 0.09 0.06 0.9 0.6 0.66 0.5 0.67;
0.79 0.96 0.75 0.79 0.87 0.98 0.43 0.33 0.5]; % DM2中第3个相关者的原始决策矩阵
APJ1=[0 0 0 1 0 0 1 0 0;
0 0 0 0 1 0 0 1 0;
0 0 0 0 0 1 0 0 1;
0 0 0 0 0 0 1 0 0;
0 0 0 0 0 0 0 1 0;
0 0 0 0 0 0 0 0 1;
0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0]; % DM1的可达矩阵
APJ2=[0 1 1 0 0 0 0 0 0;
0 0 1 0 0 0 0 0 0;
0 0 0 0 0 0 0 0 0;
0 0 0 0 1 1 0 0 0;
0 0 0 0 0 1 0 0 0;
0 0 0 0 0 0 0 0 0;
0 0 0 0 0 0 0 1 1;
0 0 0 0 0 0 0 0 1;
0 0 0 0 0 0 0 0 0]; % DM2的可达矩阵
adjusted_F11=sdpvar(m,m,'full'); % DM1中第1个相关者的调整决策矩阵
adjusted_F12=sdpvar(m,m,'full');
adjusted_F13=sdpvar(m,m,'full');
adjusted_r1=sdpvar(m,m,'full');% DM1的群体偏好
XJ1=binvar(m,m,'full');
APJX1=sdpvar(m,m,'full');% APJ*XJ
Q1=sdpvar(m,1,'full');% 将APJX1按列求和后的列向量,第s个元素为0,代表第s个状态为均衡状态
adjusted_F21=sdpvar(m,m,'full'); % DM2中第1个相关者的调整决策矩阵
adjusted_F22=sdpvar(m,m,'full');
adjusted_F23=sdpvar(m,m,'full');
adjusted_r2=sdpvar(m,m,'full');
XJ2=binvar(m,m,'full');
APJX2=sdpvar(m,m,'full');% APJ*XJ
Q2=sdpvar(m,1,'full');% 将APJX1按列求和后的列向量,第s个元素为0,代表第s个状态为均衡状态
S11=sdpvar(m,m); % DM1中第1个相关者的总调整量 %S11=abs(adjusted_F11-F11) 这是对称矩阵
S12=sdpvar(m,m);
S13=sdpvar(m,m);
S1=sdpvar(1,1);% DM1的总调整量
S21=sdpvar(m,m);% DM2中第1个相关者的总调整量
S22=sdpvar(m,m);
S23=sdpvar(m,m);
S2=sdpvar(1,1);% DM2的总调整量
Constraints=[];
% 第一个决策者的约束条件
Constraints = [Constraints; APJ1.*XJ1==APJX1];% Nash稳定
Constraints = [Constraints; (APJX1>=0)&(APJX1<=1)];
Constraints = [Constraints; sum(APJX1,2)==Q1];% Nash稳定
Constraints = [Constraints; Q1(1)==0]; % 使得第一个状态为均衡状态
% 求解群体偏好
Constraints = [Constraints; 0.3*adjusted_F11+0.4*adjusted_F12+0.3*adjusted_F13==adjusted_r1];
Constraints = [Constraints; (adjusted_r1>=0)&(adjusted_r1<=1)];
% 约束b-c 求解改良矩阵XJ1 (X+1)
Constraints = [Constraints; 100*XJ1>=0.5-adjusted_r1];
Constraints = [Constraints; -100*(1-XJ1)+0.01<=0.5-adjusted_r1];
Constraints = [Constraints; (XJ1>=0)&(XJ1<=1)];
% 其他基本约束
for i=1:m
for j=1:m
Constraints = [Constraints; adjusted_F11(i,j)+adjusted_F11(j,i)==1];
Constraints = [Constraints; (adjusted_F11>=0)&(adjusted_F11<=1)];
Constraints = [Constraints; adjusted_F12(i,j)+adjusted_F12(j,i)==1];
Constraints = [Constraints; (adjusted_F12>=0)&(adjusted_F12<=1)];
Constraints = [Constraints; adjusted_F13(i,j)+adjusted_F13(j,i)==1];
Constraints = [Constraints; (adjusted_F13>=0)&(adjusted_F13<=1)];
end
end
% 第2个决策者的约束条件
Constraints = [Constraints; APJ2.*XJ2==APJX2];% Nash稳定
Constraints = [Constraints; (APJX2>=0)&(APJX2<=1)];
Constraints = [Constraints; sum(APJX2,2)==Q2];% Nash稳定
Constraints = [Constraints; Q2(1)==0]; % 使得第一个状态为均衡状态
% 求解群体偏好
Constraints = [Constraints; 0.3*adjusted_F21+0.4*adjusted_F22+0.3*adjusted_F23==adjusted_r2];
Constraints = [Constraints; (adjusted_r2>=0)&(adjusted_r2<=1)];
% 约束b-c 求解改良矩阵XJ2 (X+2)
Constraints = [Constraints; 100*XJ2>=0.5-adjusted_r2];
Constraints = [Constraints; -100*(1-XJ2)+0.01<=0.5-adjusted_r2];
Constraints = [Constraints; (XJ2>=0)&(XJ2<=1)];
% 其他基本约束
for i=1:m
for j=1:m
Constraints = [Constraints; adjusted_F21(i,j)+adjusted_F21(j,i)==1];
Constraints = [Constraints; (adjusted_F21>=0)&(adjusted_F21<=1)];
Constraints = [Constraints; adjusted_F22(i,j)+adjusted_F22(j,i)==1];
Constraints = [Constraints; (adjusted_F22>=0)&(adjusted_F22<=1)];
Constraints = [Constraints; adjusted_F23(i,j)+adjusted_F23(j,i)==1];
Constraints = [Constraints; (adjusted_F23>=0)&(adjusted_F23<=1)];
end
end
% 求解每个相关者的调整量矩阵
Constraints=[Constraints, (-F11+adjusted_F11<=S11)&(F11-adjusted_F11<=S11)];
Constraints=[Constraints, (-F12+adjusted_F12<=S12)&(F12-adjusted_F12<=S12)];
Constraints=[Constraints, (-F13+adjusted_F13<=S13)&(F13-adjusted_F13<=S13)];
Constraints=[Constraints, (-F21+adjusted_F21<=S21)&(F21-adjusted_F21<=S21)];
Constraints=[Constraints, (-F22+adjusted_F22<=S22)&(F22-adjusted_F22<=S22)];
Constraints=[Constraints, (-F23+adjusted_F23<=S23)&(F23-adjusted_F23<=S23)];
Constraints=[Constraints, sum(S11(:))+sum(S12(:))+sum(S13(:))==S1];
Constraints=[Constraints, sum(S21(:))+sum(S22(:))+sum(S23(:))==S2];
% 目标函数
z=S1+S2; %最小化所有利益相关者的总调整量
% 求解优化模型
ops=sdpsettings('solver', 'gurobi', 'verbose', 1); %求解
sol=optimize(Constraints, z, ops); %求解
if sol.problem == 0
value(adjusted_F11),
value(adjusted_F12),
value(adjusted_F13),
value(adjusted_r1),
value(XJ1),
value(APJX1),
value(Q1),
value(S11),
value(S12),
value(S13),
value(adjusted_F21),
value(adjusted_F22),
value(adjusted_F23),
value(adjusted_r2),
value(XJ2),
value(APJX2),
value(Q2),
value(S21),
value(S22),
value(S23),
value(S1),
value(S2),
value(z)
else
disp(sol.info)
end
%检查是否满足约束条件
if any(check(Constraints) > 1e-6)
error('Constraints not satisfied');
end