TPCCLIB
Toggle main menu visibility
Loading...
Searching...
No Matches
libtpcnlopt
constraints.c
Go to the documentation of this file.
1
4
/*****************************************************************************/
5
#include "tpcclibConfig.h"
6
/*****************************************************************************/
7
#include <stdio.h>
8
#include <stdlib.h>
9
#include <math.h>
10
#include <time.h>
11
#include <string.h>
12
/*****************************************************************************/
13
#include "
tpcextensions.h
"
14
#include "
tpcrand.h
"
15
/*****************************************************************************/
16
#include "
tpcnlopt.h
"
17
/*****************************************************************************/
18
19
/*****************************************************************************/
30
unsigned
int
nloptCheckParameters
(
32
unsigned
int
n,
34
double
*pLower,
36
double
*pUpper,
38
double
*p,
40
double
*pAccept,
43
double
*penalty
44
) {
45
unsigned
int
pi, nAccept=0;
46
double
range;
47
48
if
(penalty!=NULL) *penalty=1.0;
49
if
(n<1 || p==NULL || pLower==NULL || pUpper==NULL)
50
return
(nAccept);
51
for
(pi=0; pi<n; pi++) {
52
range=pUpper[pi]-pLower[pi];
if
(range<1.0E-30) range=1.0;
53
if
(p[pi]<pLower[pi]) {
54
if
(pAccept!=NULL) pAccept[pi]=pLower[pi];
55
if
(penalty!=NULL) *penalty += (pLower[pi]-p[pi])/range;
56
}
else
if
(p[pi]>pUpper[pi]) {
57
if
(pAccept!=NULL) pAccept[pi]=pUpper[pi];
58
if
(penalty!=NULL) *penalty += (p[pi]-pUpper[pi])/range;
59
}
else
{
60
if
(pAccept!=NULL) pAccept[pi]=p[pi];
61
nAccept++;
62
}
63
}
64
return
nAccept;
65
}
66
/*****************************************************************************/
67
68
/*****************************************************************************/
76
unsigned
int
nloptForceLimits
(
78
unsigned
int
n,
80
double
*pLower,
82
double
*pUpper,
84
double
*p
85
) {
86
unsigned
int
pi, nAccept=0;
87
88
if
(n<1 || p==NULL || pLower==NULL || pUpper==NULL)
return
(nAccept);
89
for
(pi=0; pi<n; pi++) {
90
if
(!(p[pi]>=pLower[pi])) {
91
p[pi]=pLower[pi];
92
}
else
if
(!(p[pi]<=pUpper[pi])) {
93
p[pi]=pUpper[pi];
94
}
else
{
95
nAccept++;
96
}
97
}
98
return
(nAccept);
99
}
100
/*****************************************************************************/
101
102
/*****************************************************************************/
nloptForceLimits
unsigned int nloptForceLimits(unsigned int n, double *pLower, double *pUpper, double *p)
Enforce the model parameters within given limits.
Definition
constraints.c:76
nloptCheckParameters
unsigned int nloptCheckParameters(unsigned int n, double *pLower, double *pUpper, double *p, double *pAccept, double *penalty)
Check that model parameters are within given limits.
Definition
constraints.c:30
tpcextensions.h
Header file for library libtpcextensions.
tpcnlopt.h
Header file for library libtpcnlopt.
tpcrand.h
Header file for libtpcrand.
Generated on
for TPCCLIB by
1.17.0