2401_82753220 2024-04-11 21:49 采纳率: 80%
浏览 3
已结题

yalmip的Infeasible problem不可行问题matlab

matlab编程求解答,我的代码没有317行,为什么会显示这个
matlab运行显示:
Version identifier: 12.10.0.0 | 2019-11-26 | 843d4de2ae
CPXPARAM_MIP_Display 1
Infeasibility row 'c317': 0 <= -6.
Presolve time = 0.00 sec. (1.65 ticks)
出错了(或者超时自动结束了)

ans =

'Infeasible problem (learn to debug) '

用的matlab2023a+Cplex12.10+yalmip


clear ;clc;yalmip('clear');% 初始化YALMIP环境 

%% 定义参数
M = 9999999;         %一个极大值 
n = 4;               % 工件总数 
m = 5;               % 机器总数
o = [4, 5, 5, 5];    % 工件i的工序数量
A = 0 : 30 : 120;     % 每个工件的到达时间,设置每30个单位时间到达一个工件
D = [66, 88, 122, 200];     % 每个工件的截止时间,自定义设置
Tij=[8,6,4,5,NaN ; 5,1,2,9,3 ; 2,7,8,10,9 ; 7,6,9,5,6];   % 工序ij的加工时间
% T = zeros(n,max(o),m);% 初始化工序ij在机器k的加工时间
T=repmat(Tij,[1 1 5]);
MJ=[2,1,3,2,NaN ; 1,1,2,3,2 ; 3,3,1,2,2 ; 2,2,1,2,3];% 工序ij的可用机器
summj=sum(MJ,"all");
MK = zeros(n, max(o), m);
for i = 1:n
    for j = 1:o(i)
                % 随机选择MJ(i,j)个不重复的k值
        selected_k = randsample(1:m, MJ(i,j), false);
                % 将选定的k值对应的M(i, j, k)赋值为1
        MK(i, j, selected_k) = 1;
    end
end

%% 决策变量
C = sdpvar(n, max(o),'full');  
X = binvar(n, max(o), m,'full');
Y = binvar(n, max(o), n, max(o),'full');


%% 约束条件

Constraints = [ ]; 
for i = 1:n
    for j = 1:o(i)
        Constraints=[Constraints,C(i,j)>=0.000000001];
        sum_X=0;
        for h = 1:n
            for g = 1:o(h)
                for k = 1:m
                    if MK(i,j,k)==0
                        T(i,j,k)=0;
                         Constraints=[Constraints,X(i,j,k)==0];
                    elseif MK(i,j,k)==1
                        sum_X=sum(X(i,j,:));
                        Constraints=[Constraints,sum_X==1];%??
                        if i==1&&j==1
                            Constraints=[Constraints,C(i,j)-T(i,j,k)==0];
                        end
                    end
                    
                    if j==1
                        Constraints=[Constraints,(C(i,j)-T(i,j,k)-A(i))+M*(1-X(i,j,k))>=0];
                    elseif j>1
                       Constraints=[Constraints,(C(i,j)-T(i,j,k)-C(i,j-1))+M*(1-X(i,j,k))>=0];
                    end

                    if h==i&&g==j+1
                       Constraints=[Constraints, Y(i,j,h,g)==1 ];
                    end
             
                     Constraints=[Constraints,(C(h,g)-T(h,g,k)-C(i,j)+M*(3-X(i,j,k)-X(h,g,k)-Y(i,j,h,g)))>=0];
                     Constraints=[Constraints,(C(i,j)-T(i,j,k)-C(h,g)+M*(2+Y(i,j,h,g)-X(i,j,k)-X(h,g,k)))>=0];

                end
            end
        end
    end
end

%% 目标函数
    objective = 0; % 初始化目标函数值为0
    max_values= 0;
    for i = 1:n
        % 计算max{C_i,ni - D_i, 0}对于每一个j
        max_values = max((C(i,o(i)) - D(i)), 0);
        % 将这些值累加到目标函数中
        objective = objective + max_values;  
    end


%% 求解

ops =sdpsettings('solver','cplex');
sol = optimize(Constraints,objective,ops);
if sol.problem == 0
    disp('求解成功');
    objective=value(objective)
else
    disp('出错了(或者超时自动结束了)');
    yalmiperror(sol.problem)
end


  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-11 21:49
    关注

    引自免费微信小程序:皆我百晓生

    首先,根据您提供的错误信息,Matlab提示Infeasibility row 'c317': 0 <= -6,这表明在优化过程中遇到了不可行约束。这可能意味着某个线性不等式在某一行的解中违反了,即右侧的值小于等于左侧的值,但在允许的范围内不允许发生。

    让我们仔细检查一下导致这个问题的部分。看起来问题可能出现在计算C(i,j)的约束中,特别是涉及到C(i,j) - T(i,j,k)的那些地方。特别是:

    1. 如果 MK(i,j,k)==1 并且 j==1,这里的约束是 (C(i,j)-T(i,j,k)-A(i))+M*(1-X(i,j,k))>=0。这里有可能是C(i,j)减去非零的T(i,j,k)后得到一个小于A(i)的值,从而导致不等式不成立。

    2. 类似的,在处理 j>1 的情况时,C(i,j)-T(i,j,k)-C(i,j-1) 的部分也可能存在问题。

    建议您进行以下步骤来定位问题:

    1. 检查变量值:确保T(i,j,k)C(i,j)X(i,j,k)的值在满足约束的前提下正确计算。特别是当MK(i,j,k)==1时,C(i,j)是否被正确更新为T(i,j,k)加上之前的C(i,j-1)

    2. 逐步调试:可以尝试打印出关键变量的值,如C(i,j), T(i,j,k), 和X(i,j,k),在执行到可能出现问题的约束之前,查看它们是否符合预期。

    3. 修改约束:如果发现C(i,j)的值确实有问题,可能是计算逻辑错误。您可能需要调整这部分的代码,确保在MK(i,j,k)==1时更新C(i,j)时不会导致不等式违背。

    4. 处理边界情况:特别注意边界条件,比如j==1的情况,确保C(i,j)不会因为T(i,j,k)而变得小于A(i)

    在找到并修复问题后,再次运行您的优化模型。如果需要,我可以协助您进一步分析代码中的问题,但请提供可能引起问题的代码片段以及相关变量的值,这样我能更准确地指导您。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月11日
  • 创建了问题 4月11日

悬赏问题

  • ¥20 找辅导 初学者 想实现一个项目 没有方向
  • ¥15 关于渗漏场的电场分布模拟
  • ¥24 matlab怎么修改仿真初始时间
  • ¥15 两分段线性回归模型分析阈值效应
  • ¥15 前端和后端代码都没报错,但是点登录没反应的?
  • ¥100 需要远程解决QSQLITE问题!
  • ¥15 利用光场表达式画出初始光场强度分布图像等几个问题在这两个图片里
  • ¥15 gozero求手把手教学,400一天
  • ¥15 泥浆冲清水的泥浆分布
  • ¥15 LASSO回归分析筛选关键基因,适合多大样本量?