How can I solve MINLP optimization using ga?
3 views (last 30 days)
Show older comments
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/153010/image.jpeg)
if true
function F = sim_fit(q,k,m)
q = zeros(3,2);
k = zeros(3,2);
m = zeros(3);
A =0;
%retailerm
J = 2;
I = 3;
a = [3 2; 3 1; 1.1 9];
d = [1850 2000; 3000 2100; 1300 900 ];
hr = [2.4 1.3; 3.8 4.5; 3.6 4.2];
so = [3.5 1.5; 2.5 0.3; 0.6 6.3];
t = [1 1; 3 1; 1 3];
E = [2 2; 3 2; 2 3];
Y = [3 3; 3 3; 3 3];
%vendor
S=100;
hv = [3.5; 4; 5];
C = [10; 50; 20];
Cv = [2.4; 3; 2;];
Cf = [3; 1.2; 2;];
s = [0.3; 0.1; 0.2;];
the = [0.01; 0.03; 0.02];
P = [10000; 8000; 9000];
dv = [sum(d(1,:)); sum(d(2,:)); sum(d(3,:))];
Q = [sum(q(1,:)); sum(q(2,:)); sum(q(3,:))];
%function
%i = item
%j = retailer
for j=1:J
for i=1:I
A = A + (S*dv(i)/(Q(i).*m(i))+(hv(i)*Q(i)*((m(i)-1)*(1-dv(i)/P(i))+dv(i)/P(i)))/2+...
dv(i)*(m(i)*C(i)+m(i)*Q(i)*Cv(i)+Cf(i))+m(i)*s(i)*dv(i)*Q(i)*the(i)/2+...
a(i,j)*d(i,j)/q(i,j)+(hr(i,j)*((1-k(i,j))^2).*q(i,j))/2+...
k(i,j)^2*so(i,j)*q(i,j)/2+(m(i).*t(i,j)*d(i,j))/q(i,j)+(m(i).*E(i,j).*d(i,j))/q(i,j)+...
Y(i,j)*d(i,j));
end
end
end
I try to solve this problem using GA optimization toolbox.
The problem is that there are three decision variables(q,m,k) q, k are 3x2 matrix variables and m is integer varialbe( 3x1 matrix ).
In the ga optimization toolbox, I only can set the number of variables for one decision variable.
How can I solve this MINLP using GA
1 Comment
Torsten
on 4 Jan 2016
What do you mean by
In the ga optimization toolbox, I only can set the number of variables for one decision variable.
?
Best wishes
Torsten.
Answers (1)
Alan Weiss
on 4 Jan 2016
Indeed, ga wants a single row vector of decision variables. This is easily arranged, as follows (or something similar):
function F = sim_fit(x)
q = reshape(x(1:6),3,2);
k = reshape(x(7:12,3,2);
m = reshape(x(13:end),3,3);
% The rest of your code goes here...
Alan Weiss
MATLAB mathematical toolbox documentation
3 Comments
Alan Weiss
on 4 Jan 2016
Well, did you call ga with 21 variables? Something like
x = ga(fun,21,...)
The line m = reshape(x(13:end),3,3); assumes implicitly that you have a total of 21 variables. I don't know if this is true or not; I was just guessing based on a quick look at your code. Figure out how many variables you have, and make sure your x variable reshapes to the correct number.
Alan Weiss
MATLAB mathematical toolbox documentation
See Also
Categories
Find more on Problem-Based Optimization Setup in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!