source: proiecte/pmake3d/make3d_original/Make3dSingleImageStanford_version0.1/third_party/opt/yalmip/solvers/callfminsearch.m @ 37

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

Added original make3d

File size: 3.2 KB
Line 
1function output = callfminsearch(interfacedata)
2
3% Author Johan Löfberg
4% $Id: callfminsearch.m,v 1.2 2005/05/07 13:53:20 joloef Exp $
5
6% Retrieve needed data
7options = interfacedata.options;
8F_struc = interfacedata.F_struc;
9c       = interfacedata.c;
10K       = interfacedata.K;
11x0      = interfacedata.x0;
12Q       = interfacedata.Q;
13lb      = interfacedata.lb;
14ub      = interfacedata.ub;
15monomtable = interfacedata.monomtable;
16
17switch options.verbose
18    case 0
19        options.fmincon.Display = 'off';
20    case 1
21        options.fmincon.Display = 'final';
22    otherwise
23        options.fmincon.Display = 'iter';
24end
25
26% Do some pre-calc to be used in calls from fmincon
27temp = sum(interfacedata.monomtable,2)>1;
28nonlinearindicies = find(temp);
29linearindicies = find(~temp);
30interfacedata.nonlinearindicies = nonlinearindicies;
31interfacedata.linearindicies = linearindicies;
32
33Aeq = [];
34beq = [];
35A = [];
36b = [];
37
38if isfield(options.fminsearch,'LargeScale')
39    if isequal(options.fminsearch.LargeScale,'off')
40        A = full(A);
41        b = full(b);
42        Aeq = full(Aeq);
43        beq = full(beq);
44    end
45end
46
47if isempty(x0)
48    x0 = zeros(length(linearindicies),1);
49else
50    x0 = x0(linearindicies);
51end
52
53if options.savedebug
54    ops = options.fminsearch;
55    save fmincondebug interfacedata A b Aeq beq x0 ops
56end
57
58showprogress('Calling FMINSEARCH',options.showprogress);
59fmincon_fun([],[],[],interfacedata); % initialize persistent
60fmincon_con([],[],[],interfacedata); % initialize persistent
61solvertime = clock;
62[xout,fmin,flag,output] = fminsearch('fmincon_fun',x0,options.fminsearch);   
63solvertime = etime(clock,solvertime);
64
65if isempty(nonlinearindicies)
66    x = xout(:);
67else
68    x = zeros(length(interfacedata.c),1);
69    for i = 1:length(linearindicies)
70        x(linearindicies(i)) = xout(i);
71    end
72end
73
74problem = 0;
75
76% Internal format for duals
77D_struc = [];
78
79% Check, currently not exhaustive...
80if flag==0
81    problem = 3;
82else
83    if flag>0
84        problem = 0;
85    else
86        if isempty(x)
87            x = repmat(nan,length(c),1);
88        end
89        if 0%any((A*x-b)>sqrt(eps)) | any( abs(Aeq*x-beq)>sqrt(eps))
90            problem = 1; % Likely to be infeasible
91        else
92            if c'*x<-1e10 % Likely unbounded
93                problem = 2;
94            else          % Probably convergence issues
95                problem = 5;
96            end
97        end
98    end
99end
100infostr = yalmiperror(problem,'FMINSEARCH');
101
102% Save all data sent to solver?
103if options.savesolverinput
104    solverinput.A = A;
105    solverinput.b = b;
106    solverinput.Aeq = Aq;
107    solverinput.beq = beq;
108    solverinput.c = c;
109    solverinput.H = Q;
110    solverinput.options = options.quadprog;
111else
112    solverinput = [];
113end
114
115% Save all data from the solver?
116if options.savesolveroutput
117    solveroutput.x = x;
118    solveroutput.fmin = fmin;
119    solveroutput.flag = flag;
120    solveroutput.output=output;
121    solveroutput.lambda=lambda;
122else
123    solveroutput = [];
124end
125
126
127
128% Standard interface
129output.Primal      = x;
130output.Dual        = D_struc;
131output.Slack       = [];
132output.problem     = problem;
133output.infostr     = infostr;
134output.solverinput = solverinput;
135output.solveroutput= solveroutput;
136output.solvertime  = solvertime;
Note: See TracBrowser for help on using the repository browser.