1 | /* |
---|
2 | * ---------------------------------------------------------------------- |
---|
3 | * TEST PROGRAM for rp_optimizer |
---|
4 | * |
---|
5 | * This is a simple test program used to exercise the rp_optimizer |
---|
6 | * library in Rappture. |
---|
7 | * |
---|
8 | * ====================================================================== |
---|
9 | * AUTHOR: Michael McLennan, Purdue University |
---|
10 | * Copyright (c) 2004-2007 Purdue Research Foundation |
---|
11 | * |
---|
12 | * See the file "license.terms" for information on usage and |
---|
13 | * redistribution of this file, and for a DISCLAIMER OF ALL WARRANTIES. |
---|
14 | * ====================================================================== |
---|
15 | */ |
---|
16 | #include <stdio.h> |
---|
17 | #include <math.h> |
---|
18 | #include "rp_optimizer.h" |
---|
19 | |
---|
20 | RpOptimStatus |
---|
21 | GetValue(values, numValues, fitnessPtr) |
---|
22 | RpOptimParam **values; /* array of input values */ |
---|
23 | int numValues; /* number of values on the list */ |
---|
24 | double *fitnessPtr; /* returns: value of fitness */ |
---|
25 | { |
---|
26 | double a = 0.0; |
---|
27 | double b = 0.0; |
---|
28 | char* func = "unknown"; |
---|
29 | |
---|
30 | int n; |
---|
31 | double fval; |
---|
32 | |
---|
33 | for (n=0; n < numValues; n++) { |
---|
34 | if (strcmp(values[n]->name,"a") == 0) { |
---|
35 | a = values[n]->value.num; |
---|
36 | } |
---|
37 | else if (strcmp(values[n]->name,"b") == 0) { |
---|
38 | b = values[n]->value.num; |
---|
39 | } |
---|
40 | else if (strcmp(values[n]->name,"func") == 0) { |
---|
41 | func = values[n]->value.str; |
---|
42 | } |
---|
43 | else { |
---|
44 | printf("ERROR: unrecognized parameter \"%s\"\n", values[n]->name); |
---|
45 | return RP_OPTIM_FAILURE; |
---|
46 | } |
---|
47 | } |
---|
48 | |
---|
49 | if (strcmp(func,"f1") == 0) { |
---|
50 | fval = (a == 0.0) ? 1.0 : b*sin(a)/a; |
---|
51 | } |
---|
52 | else if (strcmp(func,"f2") == 0) { |
---|
53 | fval = (b-a == 0.0) ? 1.0 : sin(b-a)/(b-a); |
---|
54 | } |
---|
55 | else if (strcmp(func,"another") == 0) { |
---|
56 | fval = -a*a + b; |
---|
57 | } |
---|
58 | else { |
---|
59 | printf("ERROR: unrecognized func value \"%s\"\n", func); |
---|
60 | return RP_OPTIM_FAILURE; |
---|
61 | } |
---|
62 | printf("a=%g, b=%g func=%s => f=%g\n", a, b, func, fval); |
---|
63 | |
---|
64 | *fitnessPtr = fval; |
---|
65 | return RP_OPTIM_SUCCESS; |
---|
66 | } |
---|
67 | |
---|
68 | int |
---|
69 | main(int argc, char** argv) |
---|
70 | { |
---|
71 | RpOptimEnv *envPtr; |
---|
72 | RpOptimStatus status; |
---|
73 | char *funcValues[] = { "f1", "f2", "another", NULL }; |
---|
74 | |
---|
75 | envPtr = RpOptimCreate(); |
---|
76 | RpOptimAddParamNumber(envPtr, "a", 0.0, 1.0); |
---|
77 | RpOptimAddParamNumber(envPtr, "b", 1.0, 10.0); |
---|
78 | RpOptimAddParamString(envPtr, "func", funcValues); |
---|
79 | |
---|
80 | status = RpOptimPerform(envPtr, GetValue, 10); |
---|
81 | |
---|
82 | if (status == RP_OPTIM_SUCCESS) { |
---|
83 | printf ("success!\n"); |
---|
84 | } else { |
---|
85 | printf ("failed :(\n"); |
---|
86 | } |
---|
87 | |
---|
88 | RpOptimDelete(envPtr); |
---|
89 | return 0; |
---|
90 | } |
---|