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

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

Added original make3d

File size: 5.2 KB
Line 
1function output = callquadprog(interfacedata)
2
3% Author Johan Löfberg
4% $Id: callpennlp.m,v 1.5 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 pennlp
27temp = sum(interfacedata.monomtable,2)>1;
28temp = (sum(interfacedata.monomtable,2)==1 & sum(interfacedata.monomtable~=0,2)==1);
29nonlinearindicies = find(full(~temp));
30linearindicies = find(full(temp));
31interfacedata.nonlinearindicies = nonlinearindicies;
32interfacedata.linearindicies = linearindicies;
33
34Infinity = 1.0E38;
35if isempty(lb)
36    lb = -Infinity*ones(length(linearindicies),1);
37else
38    lb(isinf(lb)) =  -Infinity;
39end
40if isempty(ub)
41    ub = Infinity*ones(length(linearindicies),1);
42else
43    ub(isinf(ub)) =  Infinity;
44end
45
46% Numer of constraints
47m = K.l+K.f;
48n = length(linearindicies);
49
50lb = lb(linearindicies);
51ub = ub(linearindicies);
52
53lbc =  0*ones(m,1);
54ubc =  Infinity*ones(m,1);
55ubc(1:K.f) = 0;
56
57if isempty(x0)
58    x0 = zeros(length(linearindicies),1);
59else
60    x0 = x0(linearindicies);
61end
62
63linearConstraints = ~any(F_struc(1:K.f+K.l,1+nonlinearindicies),2);
64if ~isempty(linearConstraints)
65    F = F_struc(1:K.f+K.l,:);
66    F_struc = [F(~linearConstraints,:);F(linearConstraints,:);F_struc(K.f+K.l+1:end,:)];
67    lbc = [lbc(~linearConstraints);lbc(linearConstraints)];
68    ubc = [ubc(~linearConstraints);ubc(linearConstraints)];
69end
70
71functiondata.nonlinearindicies = nonlinearindicies;
72functiondata.linearindicies = linearindicies;
73functiondata.monomtable = monomtable;
74functionGradientdata.nonlinearindicies = nonlinearindicies;
75functionGradientdata.linearindicies = linearindicies;
76functionGradientdata.monomtable = monomtable;
77functionHessiandata.nonlinearindicies = nonlinearindicies;
78functionHessiandata.linearindicies = linearindicies;
79functionHessiandata.monomtable = monomtable;
80
81constraintdata.nonlinearindicies = nonlinearindicies;
82constraintdata.linearindicies = linearindicies;
83constraintdata.monomtable = monomtable;
84constraintGradientdata.nonlinearindicies = nonlinearindicies;
85constraintGradientdata.linearindicies = linearindicies;
86constraintGradientdata.monomtable = monomtable;
87constraintHessiandata.nonlinearindicies = nonlinearindicies;
88constraintHessiandata.linearindicies = linearindicies;
89constraintHessiandata.monomtable = monomtable;
90
91functiondata.F_struc = [interfacedata.f c(:)'];
92constraintdata.F_struc = F_struc(1:K.l+K.f,:);start = K.f + K.l + 1;
93functionGradientdata.F_struc   = F_struc(start:start+n-1,:);start = start+n;
94functionHessiandata.F_struc    = F_struc(start:start+n^2-1,:);start = start+n^2;
95constraintGradientdata.F_struc = F_struc(start:start+n*m-1,:);start = start+n*m;
96constraintHessiandata.F_struc  = F_struc(start:end,:);start = start+n*m;
97
98datasaver(functiondata,functionGradientdata,functionHessiandata,constraintdata,constraintGradientdata,constraintHessiandata)
99
100Infinity = 1.0E38;
101pen.nvars = n;
102pen.nlin = length(find(linearConstraints));
103pen.nconstr = m;
104pen.nnz_gradient = n;
105pen.nnz_hessian = (n+1)*n/2;
106pen.lbv = lb(:)';
107pen.ubv = ub(:)';
108pen.lbc = lbc(:)';
109pen.ubc = ubc(:)';
110pen.xinit= x0(:)';
111pen.my_f = 'pennlp_fun';
112pen.my_f_gradient = 'pennlp_fungrad';
113pen.my_f_hessian = 'pennlp_funhess';
114pen.my_g = 'pennlp_con';
115pen.my_g_gradient = 'pennlp_congrad';
116pen.my_g_hessian =  'pennlp_conhess';
117
118ops = struct2cell(options.pennlp);ops = [ops{1:end}];
119pen.ioptions = [ops(1:2) options.verbose ops(3:15)];
120if options.verbose>0
121    pen.ioptions(3) = pen.ioptions(3)+1;
122end
123pen.doptions = ops(16:end);
124
125%pen.ioptions = ops(1:15);
126%pen.foptions = ops(16:end);
127%pen.ioptions(4) = max(0,min(3,options.verbose+1));
128
129%pen.ioptions = [100 100 2 0 0 0 1 0 0 2 0 0 0 -1 0 1];
130%pen.doptions = [1.0E-7 1.0E0 1.0E-0 1.0E-2 5.0E-1 1.0E-1 1.0E-6 1.0E-12 1.0e-1 0.05 1.0 1.0 1.0];
131
132if options.savedebug
133    save pennlpdebug pen
134end
135
136showprogress('Calling FMINCON',options.showprogress);
137solvertime = clock;
138[obj,xout,duals,flag] = pennlpm(pen);
139solvertime = etime(clock,solvertime);
140
141if isempty(nonlinearindicies)
142    x = xout(:);
143else
144    x = zeros(length(interfacedata.c),1);
145    for i = 1:length(linearindicies)
146        x(linearindicies(i)) = xout(i);
147    end
148end
149
150switch flag
151    case 0
152        problem = 0;
153    case {1,6,7}
154        problem = 4;
155    otherwise
156        problem = 9;
157end
158
159% Internal format for duals
160D_struc = [];
161
162% Save all data sent to solver?
163if options.savesolverinput
164    solverinput.pen = pen;
165else
166    solverinput = [];
167end
168
169% Save all data from the solver?
170if options.savesolveroutput
171    solveroutput.obj = obj;
172    solveroutput.xout = xout;
173    solveroutput.duals = duals;
174    solveroutput.flag = flag;
175else
176    solveroutput = [];
177end
178
179% Standard interface
180output.Primal      = x;
181output.Dual        = D_struc;
182output.Slack       = [];
183output.problem     = problem;
184output.solverinput = solverinput;
185output.solveroutput= solveroutput;
186output.solvertime  = solvertime;
Note: See TracBrowser for help on using the repository browser.