-
Notifications
You must be signed in to change notification settings - Fork 24
/
cost.cc
55 lines (51 loc) · 1.26 KB
/
cost.cc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include "cost.hh"
using namespace std;
double cost(simulationdata simdata, int which, char type, double targets[8][20]){
double cost, tempcost;
float reference;
float points[20];
float weight[20] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
int count = 0;
int whichdata;
float multiplier = 0;
switch(type){
case 'V':
for(int i = (int)floor(simdata.numpoints/5); i < simdata.numpoints; i += 20){
points[count] = simdata.V[i];
//cerr << i << " ";
++count;
}
multiplier = 1e3;
whichdata = which;
break;
case 'I':
for(int i = (int)floor(simdata.numpoints/5)+10; i <= 3*(int)floor(simdata.numpoints/5); i += 10){//we add 2 to count so we get 20 pts
//cerr << i << " ";
points[count] = simdata.I[i];
++count;
}
multiplier = 10e9;
weight[0] = 0;
weight[1] = 2;
weight[2] = 2;
weight[3] = 2;
weight[4] = 2;
weight[5] = 2;
whichdata = which + 3;
break;
}
for(int i = 0; i < 20; ++i){
reference = targets[whichdata][i];
if(isnan(points[i])){
cost = 1.2e60;
//cerr << "\n A NAN cost has been removed";
i = 20;
}
else{
tempcost = pow(((reference - points[i])*multiplier),2)*weight[i];
cost += tempcost;
}
}
//cerr << "\n Good cost! = " << cost;
return cost;
}