Version 0.4
Compared to Version 0.3, the major changes are as follows. Except for the first one, they are all improvements on the MATLAB interface rather than the Fortran code. This release also removes large unwanted files in the history of the repo, making its size reduced from 100+MB to ~15MB.
-
The definition of
weight
incobyla/setdrop_tr
was buggy (our implementation of this function is completely different from the one by Powell, so Powell's original code does not have this problem). The problematic code was adopted from LINCOA, which does not have the same problem due to the definition ofxopt
in this function. The bug has been fixed. See the comment inlincoa/setdrop_tr
. -
If
lb
containsNaN
, then we raise a warning "INVOKER:NaNInLB
" and regard the constraints as infeasible. The same forub
. See the functionpre_bcon
inpreprima.m
. This is consistent with the behavior ofNaN
in the floating point number system. In previous versions, theNaN
in bounds is considered as no bound. -
If
Aineq
orbineq
containsNaN
, then we raise a warning "INVOKER:NaNInequality
" and regard the constraints as infeasible. Similar forAeq
andbeq
. See the functionpre_lcon
inpreprima.m
. -
If
Aineq
contains infinite values, orbineq = -Inf
, then we raise a warning "INVOKER:InfInequality
" and regard the constraints as infeasible. Similar forAeq
andbeq
. See the functionpre_lcon
inpreprima.m
. -
We allow
x0
,bineq
,beq
to be rows. See the functionspre_x0
,pre_lcon
,pre_fun
,pre_nonlcon
inpreprima.m
. No matter whether they are rows or columns, we always requiresize(Aineq) = [length(bineq), length(x0)]
andsize(Aeq) = [length(beq), length(x0)]
. This is consistent with the behavior offmincon
. We raise warnings "INVOKER:X0IsRow
", "INVOKER:BineqIsRow
", or "INVOKER:BeqIsRow
" if they are rows. -
iprint
is fully implemented. The MATLAB version behaves exactly as the Fortran version regardingiprint
, except ifclassical
is true, in which case the MATLAB version does not support a nonzeroiprint
. -
testprima
: perturb is changed toeps
the perturbation ofx0
is changed tox0 = x0 + perturb*max(norm(x0), 1)*r/norm(r);
In addition, the following is added to lines 122–124 to test
iprint
:if ~release % 20230508: Test the newly implemented iprint. problem.options.iprint = round(4*(2*rand() - 1)); end
N.B.: This version still retains the RESCUE and IDZ techniques in Powell's original implementation. See the release notes of Version 0.3 for more details.