You have NaNs in your constraints! Thanks for any answers!
10 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
%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!
0 commentaires
Réponse acceptée
Walter Roberson
le 9 Avr 2020
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.
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Logical dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!