-
Notifications
You must be signed in to change notification settings - Fork 29
/
Copy pathlinearProjection.m
52 lines (37 loc) · 1.08 KB
/
linearProjection.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
% Use LP to solve the Linear assignment problem
function [X] = linearProjection(Xp)
Xp(Xp<0) = 0;
N = size(Xp,1);
n = round(sqrt(N));
f = -Xp;
% Constraint matrix
A = [];
b = [];
% for i=1:N
% ar = zeros(1,2*N);
% ar(i) = 1; ar(N+i) = -1;
% A = [A; ar]; b=[b; Xp(i)];
%
% ar(i) = -1; ar(N+i) = -1;
% A = [A; ar]; b=[b; -Xp(i)];
% end
% Now, set sum of rows and column to 1
AA = []; bb=[];
for i=1:n
ta = zeros(n,n); ta(i,:) =1;
tar = ta(:)';
AA = [AA; tar]; bb = [bb;1];
AA = [AA; -tar]; bb = [bb;-1];
ta = zeros(n,n); ta(:,i) =1;
tar = ta(:)';
AA = [AA; tar]; bb = [bb;1];
AA = [AA; -tar]; bb = [bb;-1];
end
A=[A; AA];
b=[b;bb];
% Now, solve lp
%[Xlp] = gurobiLinProg(f, A,b);
[Xlp] = linprog(f, A,b, [], [], zeros(N,1), ones(N,1));
X = reshape(Xlp(1:N),n,n);
%disp(X);
end