source: proiecte/pmake3d/make3d_original/Make3dSingleImageStanford_version0.1/third_party/opt/yalmip/modules/global/rounder.m @ 37

Last change on this file since 37 was 37, checked in by (none), 14 years ago

Added original make3d

File size: 2.9 KB
Line 
1function [upper,x_min] = rounder(p,relaxedsolution)
2
3% Extremely simple heuristic for finding integer
4% solutions.
5%
6% Rounds up and down, fixes etc.
7
8% This was the relaxed solution
9x = relaxedsolution.Primal;
10
11% Assume we fail
12upper = inf;
13x_min = x;
14
15% These should be integer
16intvars = [p.integer_variables(:);p.binary_variables(:)];
17p.options.rounding = [1 1 1 1];
18
19% b=p.F_struc(:,1);
20% A=-p.F_struc(:,2:end);
21% c=p.c;
22%
23% %x=rand(length(p.c),1)
24% xtilde = round(x(intvars));
25% xplus=sdpvar(length(xtilde),1);
26% xminus=sdpvar(length(xtilde),1);
27% xj=sdpvar(length(xtilde),1);
28% t=sdpvar(1,1);
29%
30% while 1
31%     goneup   = find(xtilde==p.ub(intvars));
32%     gonedown = find(xtilde==p.lb(intvars));
33%     F=set([]);%xplus>0)+set(xminus>0)+set(xj==xtilde+xplus-xminus);
34%     F=F + set(b(1:p.K.l) -A(1:p.K.l,:)*[t;xj]>0);
35%     F = F + set(reshape(b(p.K.l+1:end) -A(p.K.l+1:end,:)*[t;xj],14,14) > 0)
36%     solvesdp(F+set(0<xj<1),-sum(xj(goneup))+sum(xj(gonedown)));%+sum(xplus)+sum(xminus));
37%
38%     xtilde=round(double(xj));
39% end
40
41if p.options.rounding(1)
42    % Round, update nonlinear terms, and compute feasibility
43    xtemp = x;xtemp(intvars) = round(xtemp(intvars));
44    xtemp(p.binary_variables(:)) = min(1,xtemp(p.binary_variables(:)));
45    xtemp(p.binary_variables(:)) = max(0,xtemp(p.binary_variables(:)));
46    xtemp = setnonlinearvariables(p,xtemp); 
47    if checkfeasiblefast(p,xtemp,p.options.bnb.feastol)%res>-p.options.bnb.feastol
48        x_min = xtemp;
49        upper = p.f+x_min'*p.Q*x_min + p.corig'*x_min;
50        return
51    end
52end
53
54if p.options.rounding(2)
55    % Do same using fix instead
56    xtemp = x;xtemp(intvars) = fix(xtemp(intvars));
57    xtemp(p.binary_variables(:)) = min(1,xtemp(p.binary_variables(:)));
58    xtemp(p.binary_variables(:)) = max(0,xtemp(p.binary_variables(:)));   
59    xtemp = setnonlinearvariables(p,xtemp); 
60    if checkfeasiblefast(p,xtemp,p.options.bnb.feastol)%if res>-p.options.bnb.feastol
61        x_min = xtemp;
62        upper = p.f+x_min'*p.Q*x_min + p.corig'*x_min;
63        return
64    end
65end
66
67if p.options.rounding(3)
68    % ...or ceil
69    xtemp = x;xtemp(intvars) = ceil(xtemp(intvars));
70    xtemp(p.binary_variables(:)) = min(1,xtemp(p.binary_variables(:)));
71    xtemp(p.binary_variables(:)) = max(0,xtemp(p.binary_variables(:)));   
72    xtemp = setnonlinearvariables(p,xtemp); 
73    if checkfeasiblefast(p,xtemp,p.options.bnb.feastol)%if res>-p.options.bnb.feastol
74        x_min = xtemp;
75        upper = p.f+x_min'*p.Q*x_min + p.corig'*x_min;
76        return
77    end
78end
79
80if p.options.rounding(4)
81    % or floor
82    xtemp = x;xtemp(intvars) = floor(xtemp(intvars));
83    xtemp(p.binary_variables(:)) = min(1,xtemp(p.binary_variables(:)));
84    xtemp(p.binary_variables(:)) = max(0,xtemp(p.binary_variables(:)));   
85    xtemp = setnonlinearvariables(p,xtemp); 
86    if checkfeasiblefast(p,xtemp,p.options.bnb.feastol)%if res>-p.options.bnb.feastol
87        x_min = xtemp;
88        upper = p.f+x_min'*p.Q*x_min + p.corig'*x_min;
89        return
90    end
91end
Note: See TracBrowser for help on using the repository browser.