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

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

Added original make3d

File size: 3.4 KB
Line 
1function p = preprocess_bilinear_bounds(p)
2
3% if ~isempty(p.bilinears)
4%     quadratics = find(p.bilinears(:,2)  == p.bilinears(:,3));
5%     for i = quadratics(:)'
6%         if ismember(p.bilinears(i,2),p.binary_variables)
7%             p.binary_variables = [p.binary_variables p.bilinears(i,1)];
8%         elseif ismember(p.bilinears(i,2),p.integer_variables)
9%             p.integer_variables = [p.integer_variables p.bilinears(i,1)];
10%         end
11%     end
12% end
13
14if ~isempty(p.integer_variables)
15    for i = 1:size(p.bilinears,1)
16        if ismember(p.bilinears(i,2),p.integer_variables)
17            if ismember(p.bilinears(i,3),p.integer_variables)
18                p.integer_variables = [p.integer_variables p.bilinears(i,1)];
19            end
20        end
21    end
22    if p.K.f > 0
23        for i = 1:p.K.f
24            if all(p.F_struc(i,:) == fix(p.F_struc(i,:)))
25                involved = find(p.F_struc(i,2:end));
26                if nnz(ismember(involved,p.integer_variables)) == length(involved)-1
27                    p.integer_variables = [p.integer_variables involved];
28                end
29            end
30        end
31        p.integer_variables  = unique(p.integer_variables );
32    end
33end
34
35if ~isempty(p.binary_variables)
36    for i = 1:size(p.bilinears,1)
37        if ismember(p.bilinears(i,2),p.binary_variables)
38            if ismember(p.bilinears(i,3),p.binary_variables)
39                p.binary_variables = [p.binary_variables p.bilinears(i,1)];
40            end
41        end
42    end
43    for i = 1:p.K.f
44        if all(p.F_struc(i,:) == fix(p.F_struc(i,:)))
45            involved = find(p.F_struc(i,2:end));
46            if nnz(ismember(involved,p.binary_variables)) == length(involved)-1
47                p.binary_variables = [p.binary_variables involved];
48            end
49        end
50    end
51    p.binary_variables  = unique(p.binary_variables );
52
53end
54
55if isempty(p.ub)
56    p.ub = repmat(inf,length(p.c),1);
57end
58if isempty(p.lb)
59    p.lb = repmat(-inf,length(p.c),1);
60end
61if ~isempty(p.F_struc)
62    [lb,ub,used_rows] = findulb(p.F_struc,p.K);
63    if ~isempty(used_rows)
64        lower_defined = find(~isinf(lb));
65        if ~isempty(lower_defined)
66            p.lb(lower_defined) = max(p.lb(lower_defined),lb(lower_defined));
67        end
68        upper_defined = find(~isinf(ub));
69        if ~isempty(upper_defined)
70            p.ub(upper_defined) = min(p.ub(upper_defined),ub(upper_defined));
71        end
72        % Remove linear bounds
73        used_rows = used_rows(find(~any(p.F_struc(p.K.f+used_rows,1+p.nonlinears),2)));
74        not_used_rows = setdiff(1:p.K.l,used_rows);
75        for i = 1:length(p.KCut.l)
76            p.KCut.l(i) = find(not_used_rows==p.KCut.l(i) );
77            p.originalModel.KCut.l(i) = find(not_used_rows==p.originalModel.KCut.l(i) );
78        end
79        if ~isempty(used_rows)
80            p.F_struc(p.K.f+used_rows,:)=[];
81            p.K.l = p.K.l - length(used_rows);
82            used_rows = used_rows(used_rows <= p.originalModel.K.l);
83            p.originalModel.F_struc(p.originalModel.K.f+used_rows,:)=[];
84            p.originalModel.K.l = p.originalModel.K.l - length(used_rows);
85        end
86    end
87end
88p.lb(p.binary_variables) = max(0,p.lb(p.binary_variables));
89p.ub(p.binary_variables) = min(1,p.ub(p.binary_variables));
90p.lb(p.integer_variables) = ceil(p.lb(p.integer_variables));
91p.ub(p.integer_variables) = floor(p.ub(p.integer_variables));
92
93p = clean_bounds(p);
94if ~isempty(p.bilinears)
95    p = updatenonlinearbounds(p);
96end
Note: See TracBrowser for help on using the repository browser.