0001
0002
0003
0004
0005
0006 function [status] = eval_alx(obj)
0007
0008
0009 status=0;
0010
0011
0012 if (obj.ALxtck < obj.ticker)
0013 starttime = cputime;
0014
0015
0016
0017
0018 x=obj.x;
0019 Y=obj.Y;
0020
0021
0022 userdata=obj.userdata;
0023
0024 [fx, userdata] = obj.objfun(x, Y, userdata);
0025 obj.objx=fx;
0026
0027
0028
0029 ineqx=[];
0030
0031 if (obj.NgNLN + obj.NgLIN>0)
0032 [gx, userdata] = obj.confun(x, Y, userdata);
0033 ineqx = obj.ineqshift + obj.ineqmlt .* gx(obj.ineqmap);
0034 obj.ineqx = ineqx;
0035 obj.eqx = obj.eqshift + gx(obj.eqmap);
0036 end
0037
0038
0039 xboxx = [];
0040 if (obj.Nxbox>0)
0041 xboxx = obj.xboxshift + obj.xboxmlt .* obj.xall(obj.xboxmap);
0042 obj.xboxx=xboxx;
0043 end
0044
0045 ALx=fx;
0046
0047
0048
0049
0050
0051
0052 ind=obj.xboxindbar;
0053 if (~isempty(ind))
0054 ALx=ALx + obj.uxbox(ind)'*(obj.pxbox(ind).*obj.phibar(xboxx(ind)));
0055 end
0056
0057 ind=obj.xboxindphi;
0058 if (~isempty(ind))
0059 ALx=ALx + obj.uxbox(ind)'*(obj.pxbox(ind).*obj.phi2(xboxx(ind)./obj.pxbox(ind)));
0060 end
0061
0062
0063
0064
0065
0066
0067
0068 ind=obj.ineqindphi;
0069 if (~isempty(ind))
0070 ALx=ALx + obj.uineq(ind)'*(obj.pineq(ind).*obj.phi2(ineqx(ind)./obj.pineq(ind)));
0071 end
0072
0073
0074 if (obj.Neq>0)
0075 ALx = ALx + obj.ueq'*obj.eqx;
0076 end
0077
0078
0079 if ~isempty(obj.Yboxindbar)
0080 for k=obj.Yboxindbar
0081
0082 pkx=obj.PYbox(k);
0083 Ykx = Y{obj.Yboxmap(k)};
0084 Akx=-obj.Yboxshift(k)*speye(size(Ykx)) - obj.Yboxmlt(k)*Ykx;
0085
0086 [R,iii]=chol(Akx);
0087 if (iii~=0)
0088 ALx=Inf;
0089
0090 break;
0091 end
0092
0093
0094
0095 ALx = ALx -2*pkx*sum(log(diag(R)));
0096
0097 end
0098 end
0099
0100
0101
0102 if ~isempty(obj.Yboxindphi)
0103 for k=obj.Yboxindphi
0104 pkx=obj.PYbox(k);
0105 Ykx = Y{obj.Yboxmap(k)};
0106 Akx=obj.Yboxshift(k)*speye(size(Ykx)) + obj.Yboxmlt(k)*Ykx;
0107 umatk=obj.UYbox{k};
0108
0109
0110 Z=(pkx*speye(size(Akx))-Akx);
0111 [R,iii]=chol(Z);
0112 if (iii~=0)
0113 ALx=Inf;
0114
0115 break;
0116 end
0117
0118 invZ=inv(Z);
0119
0120 ALx = ALx + trace(pkx^2*umatk*invZ-pkx*umatk);
0121 end
0122 end
0123
0124
0125 if ~isempty(obj.Aindphi)
0126 for k=obj.Aindphi
0127 pkx=obj.PA(k);
0128
0129 kuser=obj.Amap(k);
0130 [Akuserx, userdata] = obj.mconfun(x, Y, kuser, userdata);
0131 Akx = obj.Ashift(k)*speye(size(Akuserx)) + obj.Amlt(k) .* Akuserx;
0132 umatk=obj.UA{k};
0133
0134
0135 Z=(pkx*speye(size(Akx))-Akx);
0136 [R,iii]=chol(Z);
0137 if (iii~=0)
0138 ALx=Inf;
0139 break;
0140 end
0141 invZ=inv(Z);
0142
0143
0144 ALx = ALx + pkx^2*(umatk(:)'*invZ(:))-pkx*trace(umatk);
0145 end
0146 end
0147
0148
0149 obj.userdata=userdata;
0150
0151
0152 obj.ALx = ALx;
0153 obj.ALxtck = obj.ticker;
0154
0155
0156 obj.stats_ncall_alx = obj.stats_ncall_alx + 1;
0157 obj.stats_time_alx = obj.stats_time_alx + cputime - starttime;
0158 end
0159