- 001
- 002
- 003
- 004
- 005
- 006
- 007
- 008
- 009
- 010
- 011
- 012
- 013
- 014
- 015
- 016
- 017
- 018
- 019
- 020
- 021
- 022
- 023
- 024
- 025
- 026
- 027
- 028
- 029
- 030
- 031
- 032
- 033
- 034
- 035
- 036
- 037
- 038
- 039
- 040
- 041
- 042
- 043
- 044
- 045
- 046
- 047
- 048
- 049
- 050
- 051
- 052
- 053
- 054
- 055
- 056
- 057
- 058
- 059
- 060
- 061
- 062
- 063
- 064
- 065
- 066
- 067
- 068
- 069
- 070
- 071
- 072
- 073
- 074
- 075
- 076
- 077
- 078
- 079
- 080
- 081
- 082
- 083
- 084
- 085
- 086
- 087
- 088
- 089
- 090
- 091
- 092
- 093
- 094
- 095
- 096
- 097
- 098
- 099
- 100
/* ../COBYLA2/cobyla2.f -- translated by f2c (version 20100827) */
...
/* Subroutine */ int cobyla_(integer *n, integer *m, doublereal *x,
doublereal *rhobeg, doublereal *rhoend, integer *iprint, integer *
maxfun, doublereal *w, integer *iact)
{
static integer ia, idx, mpp, icon, isim, isigb, idatm, iveta, isimi,
ivsig, iwork;
extern /* Subroutine */ int cobylb_(integer *, integer *, integer *,
doublereal *, doublereal *, doublereal *, integer *, integer *,
doublereal *, doublereal *, doublereal *, doublereal *,
doublereal *, doublereal *, doublereal *, doublereal *,
doublereal *, doublereal *, integer *);
/* Parameter adjustments */
--iact;
--w;
--x;
/* Function Body */
mpp = *m + 2;
icon = 1;
isim = icon + mpp;
isimi = isim + *n * *n + *n;
idatm = isimi + *n * *n;
ia = idatm + *n * mpp + mpp;
ivsig = ia + *m * *n + *n;
iveta = ivsig + *n;
isigb = iveta + *n;
idx = isigb + *n;
iwork = idx + *n;
cobylb_(n, m, &mpp, &x[1], rhobeg, rhoend, iprint, maxfun, &w[icon], &w[
isim], &w[isimi], &w[idatm], &w[ia], &w[ivsig], &w[iveta], &w[
isigb], &w[idx], &w[iwork], &iact[1]);
return 0;
} /* cobyla_ */
...
/* Subroutine */ int cobylb_(integer *n, integer *m, integer *mpp, doublereal
*x, doublereal *rhobeg, doublereal *rhoend, integer *iprint, integer *
maxfun, doublereal *con, doublereal *sim, doublereal *simi,
doublereal *datmat, doublereal *a, doublereal *vsig, doublereal *veta,
doublereal *sigbar, doublereal *dx, doublereal *w, integer *iact)
{
/* Format strings */
static char fmt_10[] = "(/3x,\002The initial value of RHO is\002,1pe13.6"
",2x,\002and PARMU is set to zero.\002)";
static char fmt_50[] = "(/3x,\002Return from subroutine COBYLA because t"
"he \002,\002MAXFUN limit has been reached.\002)";
static char fmt_70[] = "(/3x,\002NFVALS =\002,i5,3x,\002F =\002,1pe13.6,"
"4x,\002MAXCV =\002,1pe13.6/3x,\002X =\002,1pe13.6,1p4e15.6)";
static char fmt_80[] = "(1pe19.6,1p4e15.6)";
static char fmt_210[] = "(/3x,\002Return from subroutine COBYLA because"
" \002,\002rounding errors are becoming damaging.\002)";
static char fmt_410[] = "(/3x,\002Increase in PARMU to\002,1pe13.6)";
static char fmt_580[] = "(/3x,\002Reduction in RHO to\002,1pe13.6,\002 "
"and PARMU =\002,1pe13.6)";
static char fmt_590[] = "(/3x,\002Normal return from subroutine COBYL"
"A\002)";
/* System generated locals */
integer sim_dim1, sim_offset, simi_dim1, simi_offset, datmat_dim1,
datmat_offset, a_dim1, a_offset, i__1, i__2, i__3;
doublereal d__1, d__2;
/* Builtin functions */
integer s_wsfe(cilist *), do_fio(integer *, char *, ftnlen), e_wsfe(void);
double sqrt(doublereal);
/* Local variables */
static doublereal f;
static integer i__, j, k, l, mp, np, iz;
static doublereal phi, rho, sum, beta, cmin, cmax;
static integer ivmc;
static doublereal weta;
static integer ivmd;
static doublereal temp, wsig, gamma;
static integer iflag;
static doublereal alpha, delta, denom, tempa, barmu;
static integer nbest, ifull, iptem, jdrop;
static doublereal ratio, vmold, parmu, error, vmnew;
extern /* Subroutine */ int calcfc_(integer *, integer *, doublereal *,
doublereal *, doublereal *);
static integer ibrnch;
static doublereal edgmax, pareta, prerec, phimin, parsig;
static integer isdirn, nfvals, izdota;
static doublereal cvmaxm, dxsign, prerem;
static integer iptemp;
static doublereal resmax, cvmaxp;
static integer idxnew;
static doublereal resnew, trured;
extern /* Subroutine */ int trstlp_(integer *, integer *, doublereal *,
doublereal *, doublereal *, doublereal *, integer *, integer *,
doublereal *, doublereal *, doublereal *, doublereal *,
doublereal *, doublereal *);
/* Fortran I/O blocks */
static cilist io___22 = { 0, 6, 0, fmt_10, 0 };
static cilist io___29 = { 0, 6, 0, fmt_50, 0 };
static cilist io___33 = { 0, 6, 0, fmt_70, 0 };
static cilist io___34 = { 0, 6, 0, fmt_80, 0 };
static cilist io___39 = { 0, 6, 0, fmt_210, 0 };
Найдено в зависимостях «SlangTNG». Библиотека «COBYLA», автоматически переведённая с «Фортрана».
/* This subroutine minimizes an objective function F(X) subject to M */
/* inequality constraints on X, where X is a vector of variables that has */
/* N components. The algorithm employs linear approximations to the */
/* objective and constraint functions, the approximations being formed by */
/* linear interpolation at N+1 points in the space of the variables. */
https://tng.tuxfamily.org/index.php?title=Main_Page
XYPO3BO3 05.12.2019 15:44 # 0
#COBYLA #fortran #f2c
Konardinho 05.12.2019 17:27 # 0
XYPO3BO3 05.12.2019 20:42 # +1
Antifriz_otrabotanyi 05.12.2019 19:06 # 0
guestinxo 05.12.2019 20:05 # 0
XYPO3BO3 05.12.2019 21:39 # +1
https://en.wikipedia.org/wiki/COBYLA
«Constrained optimization by linear approximation (COBYLA) is a numerical optimization method for constrained problems where the derivative of the objective function is not known, invented by Michael J. D. Powell.»
Математический алгоритм под названием «кобыла». Эта фигню ещё добавили в питоновский пакет «scipy»:
https://stackoverflow.com/questions/12781622/
XYPO3BO3 05.12.2019 22:12 # 0
guestinxo 06.12.2019 01:12 # 0
XYPO3BO3 06.12.2019 06:06 # +1
Ты меня не бойся.
Я тебя не трону,
Ты не беспокойся.
guestinxo 05.01.2020 13:26 # 0