Utilizare
Apelarea subrutinei se face astfel: mi1f(fdf, n, x, &dx, &eps, &maxfun, w, iw, &icontor)
Parametrii
fdf - subrutina scrisa de utilizator cu următoarea declaraţie:
void fdf(const int *N, const double x[], double df[], double *f)
Trebuie să calculeze valoare funcţiei şi gradientului în punctual x = [x[0],…, x[n-1]]T, n= *N , şi salvând aceste valori dupa cum urmează:
*f = F(x),
df(j-1) = , j = 1,…, n.
Numele subrutinei poate fi ales de către utilizator după cum doreşte.
n integer, numărul necunoscutelor, pozitiv, nu se schimbă.
x double array cu n elemente. Depinde de valoarea contorului icontor
icontor > 0 : la intrare: aproximare iniţială la x.
la ieşire: soluţie computată.
icontor ≤ 0 : Punct în care Jacobianul ar trebui să fie verificat. Nu se schimbă.
dx double. Depinde de icontor.
icontor > 0 : dx nu intră în computaţie.
icontor ≤ 0 : Punct în care Jacobianul ar trebui să fie verificat. Nu se schimbă.
eps double. Pentru precizie. Este folosit numai dacă icontor este pozitiv. Trebuie să fie pozitiv. Nu se schimba.
Algoritmul se opreşte atunci când se sugerează schimbarea iteraţiei de la xk la xk+hk, cu .
maxfun integer. Este folosit doar dacă icontor este pozitiv. Redă numarul de apelări ale lui fdf.
w double array cu iw elemente.
iw integer. Reprezintă lungimea lui w. Trebuie să fie minim .
icontor integer. Redă la ieşire informaţii despre performanţă.
-
Optimizări fără restricţii. Minimalizarea unei funcţii vectoriale de normă L2
Scop
Aici x = [x1,…, xn]T este vectorul de parametrii necunoscuţi, iar fi, i= 1,…,m este un set de funcţii continue şi derivabile de două ori. Utilizatorul trebuie să realizeze o subrutină care evaluează F(x) şi Jacobianul J(x).
Utilizare
Apelarea subrutinei se face astfel: mi1l2(fdf, n, m, x, &dx, &eps, &maxfun, w, iw, &icontor)
Parametrii
fdf - subrutina scrisa de utilizator cu urmatoarea declaraţie:
void fdf(const int *N, const int *M, const double x[], double df[], double f)
Trebuie să calculeze valoare funcţiei şi gradientului în punctul
x = [x[0],…, x[n-1]]T, n= *N , m = *M şi salvând aceste vlori după cum urmează:
f[i-1] = f1(x), I = 1,…,n
df[(j-1)n+(j-1)] = , i = 1,…, m, j = 1,…, n.
Numele subrutinei poate fi ales de către utilizator dupa cum doreşte.
n integer, numărul necunoscutelor, pozitiv, nu se schimbă.
m integer, necunoscut funcţiilor, pozitiv, nu se schimbă.
x double array cu n elemente. Depinde de valoarea contorului icontor
icontor > 0 : la intrare: aproximare iniţială la x.
la ieşire: soluţie computată.
icontor ≤ 0 : Punct in care Jacobianul ar trebui să fie verificat. Nu se schimba.
dx double. Depinde de icontor.
icontor > 0 : dx nu intră în computaţie.
icontor ≤ 0 : Punct în care Jacobianul ar trebui să fie verificat. Nu se schimbă.
eps double. Pentru precizie. Este folosit numai dacă icontor este pozitiv. Trebuie să fie pozitiv.Nu se schimba.
Algoritmul se opreşte atunci când se sugerează schimbarea iteraţiei de la xk la xk+hk, cu .
maxfun integer. Este folosit doar dacă icontor este pozitiv. Redă numărul de apelări ale lui fdf.
w double array cu iw elemente.
iw integer. Reprezintă lungimea lui w. Trebuie sa fie minim .
icontor integer. Redă la ieşire informaţii despre performanţă.
-
Optimizări fără restricţii. Minimalizarea unei funcţii vectoriale de normă L1
Scop
Aici x = [x1,…, xn]T este vectorul de parametri necunoscuţi, iar fi, i= 1,…,m este un set de funcţii continue şi derivabile de două ori. Utilizatorul trebuie să realizeze o subrutină care evaluează F(x) şi Jacobianul J(x).
Utilizare
Apelarea subrutinei se face astfel: mi1l1(fdf, n, m, x, &dx, &eps, &maxfun, w, iw, &icontor)
Parametrii
fdf - subrutina scrisă de utilizator cu următoarea declaraţie:
void fdf(const int *N, const int *M, const double x[], double df[], double f)
Trebuie să calculeze valoare funcţiei şi gradientului în punctul
x = [x[0],…, x[n-1]]T, n= *N , m = *M şi salvând aceste vlori după cum urmează:
f[i-1] = f1(x), I = 1,…,n
df[(j-1)m+(j-1)] = , i = 1,…, m, j = 1,…, n.
Numele subrutinei poate fi ales de către utilizator după cum doreşte.
n integer, numărul necunoscutelor, pozitiv, nu se schimbă.
m integer, necunoscut funcţiilor, pozitiv, nu se schimbă.
x double array cu n elemente. Depinde de valoarea contorului icontor
icontor > 0 : la intrare: aproximare iniţială la x. ; la ieşire: soluţie computată.
icontor ≤ 0 : Punct în care Jacobianul ar trebui să fie verificat. Nu se schimbă.
dx double. Depinde de icontor.
icontor > 0 : dx nu intră în computaţie.
icontor ≤ 0 : Punct în care Jacobianul ar trebui să fie verificat. Nu se schimbă.
eps double. Pentru precizie. Este folosit numai dacă icontor este pozitiv. Trebuie să fie pozitiv. Nu se schimba.
Algoritmul se oprete atunci când se sugerează schimbarea iteraţiei de la xk la xk+hk, cu .
maxfun integer. Este folosit doar dacă icontor este pozitiv. Redă numărul de apelări ale lui fdf.
w double array cu iw elemente.
iw integer. Reprezintă lungimea lui w. Trebuie să fie minim .
Icontorn integer. Redă la ieşire informaţii despre performanţă.
-
Optimizări fără restricţii. Minimalizarea unei funcţii vectoriale de normă L∞
Scop
Găsirea lui x care minizează F(x), unde .
Aici x = [x1,…, xn]T este vectorul de parametri necunoscuţi, iar fi, i= 1,…,m este un set de funcţii continue şi derivabile de două ori. Utilizatorul trebuie să realizeze o subrutină care evaluează F(x) şi Jacobianul J(x).
Utilizare
Apelarea subrutinei se face astfel: mi1inf(fdf, n, m, x, &dx, &eps, &maxfun, w, iw, &icontor)
Parametrii
fdf - subrutina scrisă de utilizator cu următoarea declaratiţie
void fdf(const int *N, const int *M, const double x[], double df[], double f)
Trebuie să calculeze valoare funcţiei şi gradientului în punctul
x = [x[0],…, x[n-1]]T, n= *N , m = *M şi salvând aceste vlori după cum urmează:
f[i-1] = f1(x), I = 1,…,n
df[(j-1)n+(j-1)] = , i = 1,…, m, j = 1,…, n.
Numele subrutinei poate fi ales de către utilizator după cum doreşte.
n integer, numărul necunoscutelor, pozitiv, nu se schimbă.
m integer, necunoscut funcţiilor, pozitiv, nu se schimbă.
x double array cu n elemente. Depinde de valoarea contorului icontor
icontor > 0 : la intrare: aproximare iniţială la x; la ieşire: soluţie computată.
icontor ≤ 0 : Punct în care Jacobianul ar trebui să fie verificat. Nu se schimbă.
dx double. Depinde de icontor.
icontor > 0 : dx nu intră în computaţie.
icontor ≤ 0 : Punct în care Jacobianul ar trebui să fie verificat. Nu se schimbă.
eps double. Pentru precizie. Este folosit numai dacă icontor este pozitiv. Trebuie sa fie pozitiv. Nu se schimba.
Algoritmul se opreşte atunci când se sugerează schimbarea iteraţiei de la xk la xk+hk, cu .
maxfun integer. Este folosit doar dacă icontor este pozitiv. Redă numărul de apelări ale lui fdf.
w double array cu iw elemente.
iw integer. Reprezintă lungimea lui w. Trebuie să fie minim .
icontor integer. Redă la ieşire informatţii despre performanţă.
-
Optimizări cu restricţii. Minimalizarea unei funcţii scalare
Scop
Găsirea lui x care minizează F(x), unde , unde x = [x1,…, xn]T este vectorul de parametri necunoscuţi care satisfac următoarele egalităţi şi inegalităţi non-liniare:
ci(x) = 0 , i = 1,2,…,leq , ci(x) ≥ 0, i = leq+1,…,l.
Funcţiile F şi {ci} trebuiesc să fie continue şi de două ori derivabile.
Utilizare
Apelarea subrutinei se face astfel: mi1cf(fdfcdc, n, l, leq, x, &dx, &eps, &maxfun, w, iw, &icontor)
Parametrii
fdf -subrutina scrisă de utilizator cu următoarea declaraţie:
void fdfcdc(const int *N, const int *L, const double x[], double df[],double c[], double *f, double dc[]), unde n = *N, l = *L.
Trebuie să calculeze valoarea funcţiei şi gradientului în punctul x = [x[0],…,x[n-1]]T.
n integer, numărul necunoscutelor, pozitiv, nu se schimbă.
l integer, numărul de constrângeri, pozitiv.
leq integer. Numărul de constrângeri egale leq
x double array cu n elemente. Depinde de valoarea contorului icontor
icontor > 0 : la intrare: aproximare iniţială la x.
la ieşire: soluţie computată.
icontor ≤ 0 : Punct în care Jacobianul ar trebui să fie verificat. Nu se schimbă.
dx double. Depinde de icontor.
icontor > 0 : dx nu intra în computaţie.
icontor ≤ 0 : Punct în care Jacobianul ar trebui să fie verificat. Nu se schimbă.
eps double. Pentru precizie. Este folosit numai dacă icontor este pozitiv. Trebuie să fie pozitiv. Nu se schimbă.
Algoritmul se opreşte atunci când se sugerează schimbarea iteraţiei de la xk la xk+hk, cu .
maxfun integer. Este folosit doar dacă icontor este pozitiv. Redă numărul de apelări ale lui fdf.
w double array cu iw elemente.
iw integer. Reprezintă lungimea lui w. Trebuie să fie minim .
Icontor integer. Redă la ieşire informaţii despre performanţă.
-
Optimizări cu restricţii. Minimalizarea unei funcţii vectoriale de normă L1
Scop
Găsirea lui x care minimalizează F(x), unde x = [x1,…, xn]T este vectorul de parametri necunoscuţi care satisfac următoarele egalităţi şi inegalităţi non-liniare:
ci(x) , i = 1,2,…,leq , ci(x) , i = leq+1,…,l.
Funcţiile F, {di} şi {ci} trebuiesc să fie continue şi de două ori derivabile.
Utilizare
Apelarea subrutinei se face astfel:
mi1cl1(fdfcdc, n, m, l, leq, c, dc, x, &dx, &eps, &maxfun, w, iw, &icontor)
Parametrii
fdf - subrutina scrisă de utilizator cu următoarea declaraţie
void fdfcdc(const int *N, const int *M, const double x[], double df[], double f[])
unde n = *N, l = *L.
Trebuie să calculeze valoarea funcţiei şi gradientului în punctual x = [x[0],…,x[n-1]]T.
n integer, numărul necunoscutelor, pozitiv, nu se schimbă.
m integer, numărul functiilor, pozitiv, nu se schimbă.
l integer. numărul de constrângeri, pozitiv.
leq integer. Numărul de constrângeri egale leq
c double array cu un element.
dc double array cu l*n elemente.
x double array cu n elemente. Depinde de valoarea contorului icontor
icontor > 0 : la intrare: aproximare iniţială la x.
la ieşire: soluţie computată.
icontor ≤ 0 : Punct în care Jacobianul ar trebui să fie verificat. Nu se schimbă.
dx double. Depinde de icontor.
icontor > 0 : dx nu intră în computaţie.
icontor ≤ 0 : Punct în care Jacobianul ar trebui să fie verificat. Nu se schimbă.
eps double. Pentru precizie. Este folosit numai dacă icontor este pozitiv. Trebuie să fie pozitiv. Nu se schimbă.
Algoritmul se opreşte atunci când se sugerează schimbarea iteraţiei de la xk la xk+hk, cu .
maxfun integer. Este folosit doar dacă icontor este pozitiv. Redă numărul de apelări ale lui fdf.
w double array cu iw elemente.
iw integer. Reprezintă lungimea lui w. Trebuie să fie minim .
icontor integer. Redă la ieşire informaţii despre performanţă.
-
Optimizări cu restricţii. Minimalizarea unei funcţii vectoriale de normă L∞
Scop
Găsirea lui x care minimizează F(x), unde , x = [x1,…, xn]T este vectorul de parametri necunoscuţi care satisfac următoarele egalităţi si inegalităţi non-liniare:
ci(x) , i = 1,2,…,leq , ci(x) , i = leq+1,…,l.
Funcţiile F, {di} şi {ci} trebuiesc să fie continue şi de două ori derivabile.
Utilizare
Apelarea subrutinei se face astfel:
mi1cin(fdf, n, m, l, leq, c, dc, x, &dx, &eps, &maxfun, w, iw, &icontor)
Parametrii
fdf - subrutina scrisa de utilizator cu următoarea declaraţie:
void fdfcdc(const int *N, const int *M, const double x[], double df[], double f[])
Trebuie să calculeze valoare funcţiei şi gradientului în punctul
x = [x[0],…, x[n-1]]T, n= *N , m = *M şi salvând aceste valori după cum urmează:
f[i-1] = f1(x), I = 1,…,n
df[(j-1)n+(j-1)] = , i = 1,…, m, j = 1,…, n.
n integer, numărul necunoscutelor, pozitiv, nu se schimbă.
m integer, numărul funcţiilor, pozitiv, nu se schimbă.
l integer. numărul de constrângeri, pozitiv.
leq integer. Numărul de constrângeri egale leq
c double array cu un element.
dc double array cu l*n elemente.
x double array cu n elemente. Depinde de valoarea contorului icontor
icontor > 0 : la intrare: aproximare initială la x.
la ieşire: soluţie computată.
icontor ≤ 0 : Punct în care Jacobianul ar trebui să fie verificat. Nu se schimbă.
dx double. Depinde de icontor.
icontor > 0 : dx nu intră în computaţie.
icontor ≤ 0 : Punct în care Jacobianul ar trebui să fie verificat. Nu se schimbă.
eps double. Pentru precizie. Este folosit numai dacă icontor este pozitiv. Trebuie să fie pozitiv. Nu se schimbă.
Algoritmul se opreşte atunci când se sugerează schimbarea iteraţiei de la xk la xk+hk, cu .
maxfun integer. Este folosit doar dacă icontor este pozitiv. Redă numărul de apelări ale lui fdf.
w double array cu iw elemente.
iw integer. Reprezintă lungimea lui w. Trebuie să fie minim .
icontor integer. Redă la ieşire informaţii despre performanţă.
-
Exemple de optimizare non-liniară
| -
CALL NLPCG( rc, xr, "fun", x0 <, opt, blc, tc, par, "ptit", "grd">);
| -
Double Dogleg Optimization Method
| -
CALL NLPDD( rc, xr, "fun", x0 <,opt, blc, tc, par, "ptit", "grd">);
| -
Nelder-Mead Simplex Optimization Method
| -
CALL NLPNMS( rc, xr, "fun", x0 <,opt, blc, tc, par, "ptit", "nlc">);
| -
Newton-Raphson Optimization Method
| -
CALL NLPNRA( rc, xr, "fun", x0 <,opt, blc, tc, par, "ptit", "grd", "hes">);
| -
Newton-Raphson Ridge Optimization Method
| -
CALL NLPNRR( rc, xr, "fun", x0 <,opt, blc, tc, par, "ptit", "grd", "hes">);
| -
(Dual) Quasi-Newton Optimization Method
| -
CALL NLPQN( rc, xr, "fun", x0 <,opt, blc, tc, par, "ptit", "grd", "nlc", "jacnlc">);
| -
Quadratic Optimization Method
| -
CALL NLPQUA( rc, xr, quad, x0 <,opt, blc, tc, par, "ptit", lin>);
| -
Trust-Region Optimization Method
| -
CALL NLPTR( rc, xr, "fun", x0 <,opt, blc, tc, par, "ptit", "grd", "hes">);
|
6. MPI(Message Passing Interface) – Interfaţa Transferului de Mesaje
MPI este o specificaţie pentru dezvoltatorii şi utilizatorii de biblioteci de mesaje transferate. Singura, nu formează o bibliotecă , ci mai degrabă specificaţia a ceea ce ar trebui să fie o bibliotecă.
Pur şi simplu, scopul MPI este de a oferi un standard utilizat pe scară largă pentru scrierea de programe de tip “message passing” (transfer de mesaje). Interfaţa tinde să fie practică, portabilă, eficientă şi flexibilă. Specificaţiile interfeţei au fost definite pentru programarea în C / C + + şi Fortran.
Câteva motive pentru a utiliza MPI sunt enumerate mai jos:
-
Standardizare - MPI este singura bibliotecă de transfer de mesaje care poate fi considerată standard. Aceasta interfaţă este disponibilă pe aproape toate platformele HPC. Practic, înlocuieşte toate bibliotecile anterioare de transfer de mesaje.
-
Portabilitate - Nu este nevoie să se modifice codul sursă, atunci când se mută aplicaţia pe o platformă diferită care acceptă (şi este în conformitate cu) standardul MPI.
-
Oportunităţi de performanţă - Implementările furnizorului ar trebui să poată exploata caracteristicile hardware-ului nativ pentru a optimiza performanţa.
-
Funcţionalitate - peste 115 de rutine sunt definite în MPI-1.
-
Disponibilitate - O varietate de implementări sunt disponibile atât furnizorului cât şi domeniului public.
|
|
|
|
|
Dostları ilə paylaş: |