Asked by sharifah shuthairah syed abdullah
on 15 May 2018

how can i write to declare that x will be variable for binary 0,1

if x(i,j)=1 ;

else (x(k,q)= 0;

end;

i want to put it in my coding below

clc;

clear;

%sum sum sum sum(fik*djq*xij*xkq)

%i,k= facilities

%j,q= location

%f(i,k)= flow between facilities i and k

%d(j,q)= distance between locations j and q

%xij = 1 if facility i is assigned to location j and if otherwise, xij = 0

% Flow matrix: flow assigning facility i (column) to facility k (row)

f = [0 5 7 9;

5 0 4 6;

7 4 0 3;

9 6 3 0];

%Distance matrix: distance assigning location j (column) to location q (row)

d = [0 6 8 9;

6 0 5 1;

8 5 0 2;

9 1 2 0];

z= 0;

nf= 4;

nd= 4;

for i=1:nf

for j=1:nf

for k=1:nd

for q=1:nd

z = min('z','f(i,k)*d(j,q)*x(i,j)*x(k,q)');

end

end

end

end

%Constraints

%The first set of constraints requires that each facility gets exactly one

%location, that is for each facility, the sum of the location values

%corresponding to that facility is exactly one

Constraints.constr1 = sum(x,2) == 1;

%The second set of constraints are inequalities. These constraints specify

%that each office has no more than one facility in it.

Constraints.constr2 = sum(x,1) == 1;

disp (z);

Answer by Image Analyst
on 16 May 2018

Do you mean like this???

% x(i, j) = 1 if facility i is assigned to location j and if otherwise, xij = 0

% Flow matrix: flow assigning facility i (column) to facility k (row)

f = [0 5 7 9;

5 0 4 6;

7 4 0 3;

9 6 3 0];

x = zeros(size(f));

[rows, columns] = size(f)

for row = 1 : rows

for col = 1 : columns

facility_i = col;

facility_k = row;

if f(row, col) == facility_k

x(row, col) = 1;

end

end

end

x

Not exactly what i, j, and k mean. How are they related to row and column. If you say xij, then i=row and j=column, but then in your flow matrix explanation you say i is column, not row and you don't even mention j - you mention k which is row, but i was row. I'm confused (or you are).

sharifah shuthairah syed abdullah
on 16 May 2018

im sorry...

i and k represent facilities in flow matrix, j and q represent location in distance matrix ..

x(i,j) mean that x will be equal to 1 if i (facility) is assign in j (location) ..

x(i, j) = 1 if facility i is assigned to location j and if otherwise, xij = 0,

so otherwise mean that if x(k,q) =1 , x(i,J) will be 0...

for example

Min =(f i1,k1 * d j1,q1 * x i1,j1 * x k1,q1) + (f i1,k1 * d j1,q2 * x i1,j1 * x k1,q2) + (f i1,k1 * d j1,q3 * x i1,j1 * x k1,q3)..

( 0*0* 1*1 ) + ( 0* 6* 1*0 ) + ( 0*8 * 1 *0 )...

I want to *xi1,j1 * xk1,q1 to be 0 or 1.. if i choose i1, j1=1 the other will bw 0.. for example i2,j1 will be equal to 9

Sign in to comment.

Answer by semi legend
on 11 Nov 2018

Edited by semi legend
on 11 Nov 2018

imagine if you have 5 virables , and you want to set the last 2 either on of them 0 or 1

you could do it, but that depends in what you want for that problem "to be or not to be"

[Inf;Inf;Inf;1;1]; to be % it will force (4) and (5) to be binary by 1 or 0 or [Inf;Inf;Inf;0;0]; or not to be

inf ; means array of infinite ( integers)

hope that at least helps

Sign in to comment.

Opportunities for recent engineering grads.

Apply Today
## 0 Comments

Sign in to comment.