TPCCLIB
Loading...
Searching...
No Matches
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/*****************************************************************************/
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/*****************************************************************************/
76unsigned 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/*****************************************************************************/
unsigned int nloptForceLimits(unsigned int n, double *pLower, double *pUpper, double *p)
Enforce the model parameters within given limits.
Definition constraints.c:76
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
Header file for library libtpcextensions.
Header file for library libtpcnlopt.
Header file for libtpcrand.