[809] | 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 | } |
---|