You have NaNs in your constraints! Thanks for any answers!

7 次查看(过去 30 天)
%I have six order cycles, and various data for each order cycle,The purpose of the model is to meet the demand and minimize the total cost,This is all my code,% Is followed by related explanations
clc
cla
clf
clear all
close all
A= [...
40 30 2.1 2 3;
50 20 1.4 3 4;
60 20 1.3 4 5;
30 25 1.5 2 3;
35 35 1.2 2 5;
40 35 2.1 3 6;
]; %Data for six order cycles
D = A(:,1); %Demand per cycle
C = A(:,2); %Fixed costs incurred per order
P = A(:,3); %Unit price for each order
H = A(:,4); %Inventory costs per unit of unsold products
U = A(:,5); %Product shortage cost per unit
t = size(A,1); %Get the number of order cycles
X = intvar(t,1,'full'); %Order quantity per cycle
Y = binvar(t,1,'full'); %Whether to order at the tth cycle
S = intvar(t,1,'full'); %Period-end inventory at period t
L = intvar(t,1,'full'); %Shortage in period t
m=inf;
Z=0;
for i=1:t
Z = Z+(C(i)*Y(i)+P(i)*X(i)+H(i)*S(i)+U(i)*L(i)); %total cost
end
Constraint=[];
for i=1:t
Constraint = [Constraint, X(i)>=0,S(i)>=0,L(i)>=0];
end
Constraint = [Constraint,S(1)==X(1)-D(1)+L(1)];
for i=2:t
Constraint = [Constraint, S(i)==S(i-1)+X(i)-D(i)+L(i)]; %F=F+set(s(i)=s(i-1)+x(i)-d(i)+l(i));
end
for i=1:t
Constraint = [Constraint, X(i)<= m*Y(i),L(i)<=D(i)];% F=F+set(x(i)<=m*y(i));
end
Constraint = [Constraint,sum(Y)==3];
ops = sdpsettings('verbose',2,'solver','mosek');
sol = solvesdp(Constraint,Z,ops);
if sol.problem == 0
value(X)
value(Y)
value(Z)
else
disp('求解过程中出错');
end
%The error message is:
错误使用 compileinterfacedata (line 1061)
You have NaNs in your constraints!. Read more: https://yalmip.github.io/naninmodel/
出错 solvesdp (line 231)
[interfacedata,recoverdata,solver,diagnostic,F,~,ForiginalQuadratics] = compileinterfacedata(F,[],logdetStruct,h,options,0,solving_parametric);
出错 lotsize3 (line 54)
sol = solvesdp(Constraint,Z,ops);
%Thanks for any answers!

采纳的回答

Walter Roberson
Walter Roberson 2020-4-9
Your last set of constraints includes
X(i)<= m*Y(i)
where m=inf and Y is binvar().
binvar() have a value of either 0 or 1. When the value is 0, then x(i)<=m*Y(i) would be x(i)<=inf*0 . However, inf*0 is NaN. Therefore if any Y(i) is ever 0 then the corresponding x(i) constraint would be NaN, which is not permitted.

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Mathematics 的更多信息

产品


版本

R2014b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by