00001
00016
00017
00018
00019 #ifndef OSPARAMETERS
00020 #define OSPARAMETERS
00021
00022 #include "OSConfig.h"
00023
00024 #include <string>
00025 #include <limits>
00026
00027 #define OS_PLUS 1001
00028 #define OS_SUM 1002
00029 #define OS_MINUS 1003
00030 #define OS_NEGATE 1004
00031 #define OS_TIMES 1005
00032 #define OS_DIVIDE 1006
00033 #define OS_POWER 1009
00034 #define OS_PRODUCT 1010
00035 #define OS_ABS 2001
00036 #define OS_SQUARE 2005
00037 #define OS_SQRT 2006
00038 #define OS_LN 2007
00039 #define OS_EXP 2010
00040 #define OS_ERF 2023
00041 #define OS_SIN 3001
00042 #define OS_COS 3002
00043 #define OS_MIN 4010
00044 #define OS_MAX 4011
00045 #define OS_NUMBER 5001
00046 #define OS_PI 5003
00047 #define OS_E 5004
00048 #define OS_VARIABLE 6001
00049 #define OS_IF 7001
00050 #define OS_ALLDIFF 7016
00051
00052 #define OS_MATRIX_DETERMINANT 8001
00053 #define OS_MATRIX_TRACE 8002
00054 #define OS_MATRIX_TO_SCALAR 8003
00055
00056
00057 #define OS_MATRIX_PLUS 8501
00058 #define OS_MATRIX_SUM 8502
00059 #define OS_MATRIX_MINUS 8503
00060 #define OS_MATRIX_NEGATE 8504
00061 #define OS_MATRIX_TIMES 8505
00062 #define OS_MATRIX_PRODUCT 8506
00063 #define OS_MATRIX_INVERSE 8510
00064 #define OS_MATRIX_TRANSPOSE 8515
00065 #define OS_MATRIX_SCALARTIMES 8518
00066 #define OS_MATRIX_DOTTIMES 8520
00067 #define OS_IDENTITY_MATRIX 8536
00068 #define OS_MATRIX_LOWERTRIANGLE 8537
00069 #define OS_MATRIX_UPPERTRIANGLE 8538
00070 #define OS_MATRIX_DIAGONAL 8539
00071 #define OS_DIAGONAL_MATRIX_FROM_VECTOR 8540
00072 #define OS_MATRIX_REFERENCE 8541
00073 #define OS_MATRIX_SUBMATRIX_AT 8544
00074 #define OS_MATRIX_VAR 8601
00075 #define OS_MATRIX_OBJ 8602
00076 #define OS_MATRIX_CON 8603
00077
00078
00079
00080 #define OS_E_VALUE exp(1.0)
00081 #define OS_PI_VALUE 2*asin(1.0)
00082
00083 #define OS_SCHEMA_VERSION "2.0"
00084
00089 #define OS_NEAR_EQUAL 1e-2
00090
00091 #define OS_EPS 1e-12
00092
00093 const double OSDBL_MAX = std::numeric_limits<double>::max();
00094 const int OSINT_MAX = std::numeric_limits<int>::max();
00095
00097 extern "C" bool OSIsnan(double x);
00099 extern "C" double OSNaN();
00100
00101 std::string OSgetVersionInfo();
00102
00107 enum ENUM_OUTPUT_LEVEL
00108 {
00109 ENUM_OUTPUT_LEVEL_always = 0,
00110 ENUM_OUTPUT_LEVEL_error,
00111 ENUM_OUTPUT_LEVEL_summary,
00112 ENUM_OUTPUT_LEVEL_warning,
00113 ENUM_OUTPUT_LEVEL_info,
00114 ENUM_OUTPUT_LEVEL_debug,
00115 ENUM_OUTPUT_LEVEL_trace,
00116 ENUM_OUTPUT_LEVEL_detailed_trace,
00117
00118 ENUM_OUTPUT_LEVEL_NUMBER_OF_LEVELS
00119 };
00120
00121 #define DEFAULT_OUTPUT_LEVEL ENUM_OUTPUT_LEVEL_error
00122
00128 enum ENUM_OUTPUT_AREA
00129 {
00130 ENUM_OUTPUT_AREA_main = 1,
00131 ENUM_OUTPUT_AREA_OSAgent,
00132 ENUM_OUTPUT_AREA_Command_line_parser,
00133 ENUM_OUTPUT_AREA_OSiL_parser,
00134 ENUM_OUTPUT_AREA_OSoL_parser,
00135 ENUM_OUTPUT_AREA_OSrL_parser,
00136 ENUM_OUTPUT_AREA_OSGeneral,
00137 ENUM_OUTPUT_AREA_OSInstance,
00138 ENUM_OUTPUT_AREA_OSOption,
00139 ENUM_OUTPUT_AREA_OSResult,
00140 ENUM_OUTPUT_AREA_OSMatrix,
00141 ENUM_OUTPUT_AREA_OSiLwriter,
00142 ENUM_OUTPUT_AREA_OSoLwriter,
00143 ENUM_OUTPUT_AREA_OSrLwriter,
00144 ENUM_OUTPUT_AREA_OSModelInterfaces,
00145 ENUM_OUTPUT_AREA_OSSolverInterfaces,
00146 ENUM_OUTPUT_AREA_OSUtils,
00147
00148 ENUM_OUTPUT_AREA_NUMBER_OF_AREAS
00149 };
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161 enum ENUM_CPUSPEEDUNIT
00162 {
00163 ENUM_CPUSPEEDUNIT_hertz = 1,
00164 ENUM_CPUSPEEDUNIT_kilohertz,
00165 ENUM_CPUSPEEDUNIT_megahertz,
00166 ENUM_CPUSPEEDUNIT_gigahertz,
00167 ENUM_CPUSPEEDUNIT_terahertz,
00168 ENUM_CPUSPEEDUNIT_flops,
00169 ENUM_CPUSPEEDUNIT_kiloflops,
00170 ENUM_CPUSPEEDUNIT_megaflops,
00171 ENUM_CPUSPEEDUNIT_gigaflops,
00172 ENUM_CPUSPEEDUNIT_teraflops,
00173 ENUM_CPUSPEEDUNIT_petaflops
00174 };
00175
00176 inline int returnCPUSpeedUnit(std::string unit)
00177 {
00178 if (unit == "hertz" ) return ENUM_CPUSPEEDUNIT_hertz;
00179 if (unit == "kilohertz") return ENUM_CPUSPEEDUNIT_kilohertz;
00180 if (unit == "megahertz") return ENUM_CPUSPEEDUNIT_megahertz;
00181 if (unit == "gigahertz") return ENUM_CPUSPEEDUNIT_gigahertz;
00182 if (unit == "terahertz") return ENUM_CPUSPEEDUNIT_terahertz;
00183 if (unit == "flops" ) return ENUM_CPUSPEEDUNIT_flops;
00184 if (unit == "kiloflops") return ENUM_CPUSPEEDUNIT_kiloflops;
00185 if (unit == "megaflops") return ENUM_CPUSPEEDUNIT_megaflops;
00186 if (unit == "gigaflops") return ENUM_CPUSPEEDUNIT_gigaflops;
00187 if (unit == "teraflops") return ENUM_CPUSPEEDUNIT_teraflops;
00188 if (unit == "petaflops") return ENUM_CPUSPEEDUNIT_petaflops;
00189 return 0;
00190 }
00191
00192 inline bool verifyCPUSpeedUnit(std::string unit)
00193 {
00194 return (returnCPUSpeedUnit(unit) > 0);
00195 }
00196
00197 enum ENUM_STORAGEUNIT
00198 {
00199 ENUM_STORAGEUNIT_byte = 1,
00200 ENUM_STORAGEUNIT_kilobyte,
00201 ENUM_STORAGEUNIT_megabyte,
00202 ENUM_STORAGEUNIT_gigabyte,
00203 ENUM_STORAGEUNIT_terabyte,
00204 ENUM_STORAGEUNIT_petabyte,
00205 ENUM_STORAGEUNIT_exabyte,
00206 ENUM_STORAGEUNIT_zettabyte,
00207 ENUM_STORAGEUNIT_yottabyte
00208 };
00209
00210 inline int returnStorageUnit(std::string unit)
00211 {
00212 if (unit == "byte" ) return ENUM_STORAGEUNIT_byte;
00213 if (unit == "kilobyte" ) return ENUM_STORAGEUNIT_kilobyte;
00214 if (unit == "megabyte" ) return ENUM_STORAGEUNIT_megabyte;
00215 if (unit == "gigabyte" ) return ENUM_STORAGEUNIT_gigabyte;
00216 if (unit == "terabyte" ) return ENUM_STORAGEUNIT_terabyte;
00217 if (unit == "petabyte" ) return ENUM_STORAGEUNIT_petabyte;
00218 if (unit == "exabyte" ) return ENUM_STORAGEUNIT_exabyte;
00219 if (unit == "zettabyte") return ENUM_STORAGEUNIT_zettabyte;
00220 if (unit == "yottabyte") return ENUM_STORAGEUNIT_yottabyte;
00221 return 0;
00222 }
00223
00224 inline bool verifyStorageUnit(std::string unit)
00225 {
00226 return (returnStorageUnit(unit) > 0);
00227 }
00228
00229 enum ENUM_TIMEUNIT
00230 {
00231 ENUM_TIMEUNIT_tick = 1,
00232 ENUM_TIMEUNIT_millisecond,
00233 ENUM_TIMEUNIT_second,
00234 ENUM_TIMEUNIT_minute,
00235 ENUM_TIMEUNIT_hour,
00236 ENUM_TIMEUNIT_day,
00237 ENUM_TIMEUNIT_week,
00238 ENUM_TIMEUNIT_month,
00239 ENUM_TIMEUNIT_year
00240 };
00241
00242 inline int returnTimeUnit(std::string unit)
00243 {
00244 if (unit == "tick" ) return ENUM_TIMEUNIT_tick;
00245 if (unit == "millisecond") return ENUM_TIMEUNIT_millisecond;
00246 if (unit == "second" ) return ENUM_TIMEUNIT_second;
00247 if (unit == "minute" ) return ENUM_TIMEUNIT_minute;
00248 if (unit == "hour" ) return ENUM_TIMEUNIT_hour;
00249 if (unit == "day" ) return ENUM_TIMEUNIT_day;
00250 if (unit == "week" ) return ENUM_TIMEUNIT_week;
00251 if (unit == "month" ) return ENUM_TIMEUNIT_month;
00252 if (unit == "year" ) return ENUM_TIMEUNIT_year;
00253 return 0;
00254 }
00255
00256 inline bool verifyTimeUnit(std::string unit)
00257 {
00258 return (returnTimeUnit(unit) > 0);
00259 }
00260
00261 enum ENUM_TIMETYPE
00262 {
00263 ENUM_TIMETYPE_cpuTime = 1,
00264 ENUM_TIMETYPE_elapsedTime,
00265 ENUM_TIMETYPE_other
00266 };
00267
00268 inline int returnTimeType(std::string type)
00269 {
00270 if (type == "cpuTime" ) return ENUM_TIMETYPE_cpuTime;
00271 if (type == "elapsedTime") return ENUM_TIMETYPE_elapsedTime;
00272 if (type == "other" ) return ENUM_TIMETYPE_other;
00273 return 0;
00274 }
00275
00276 inline bool verifyTimeType(std::string type)
00277 {
00278 return (returnTimeType(type) > 0);
00279 }
00280
00281 enum ENUM_TIMECATEGORY
00282 {
00283 ENUM_TIMECATEGORY_total = 1,
00284 ENUM_TIMECATEGORY_input,
00285 ENUM_TIMECATEGORY_preprocessing,
00286 ENUM_TIMECATEGORY_optimization,
00287 ENUM_TIMECATEGORY_postprocessing,
00288 ENUM_TIMECATEGORY_output,
00289 ENUM_TIMECATEGORY_other
00290 };
00291
00292 inline int returnTimeCategory(std::string category)
00293 {
00294 if (category == "total" ) return ENUM_TIMECATEGORY_total;
00295 if (category == "input" ) return ENUM_TIMECATEGORY_input;
00296 if (category == "preprocessing" ) return ENUM_TIMECATEGORY_preprocessing;
00297 if (category == "optimization" ) return ENUM_TIMECATEGORY_optimization;
00298 if (category == "postprocessing") return ENUM_TIMECATEGORY_postprocessing;
00299 if (category == "output" ) return ENUM_TIMECATEGORY_output;
00300 if (category == "other" ) return ENUM_TIMECATEGORY_other;
00301 return 0;
00302 }
00303
00304 inline bool verifyTimeCategory(std::string category)
00305 {
00306 return (returnTimeCategory(category) > 0);
00307 }
00308
00309 enum ENUM_LOCATIONTYPE
00310 {
00311 ENUM_LOCATIONTYPE_local = 1,
00312 ENUM_LOCATIONTYPE_http,
00313 ENUM_LOCATIONTYPE_ftp
00314 };
00315
00316 inline int returnLocationType(std::string type)
00317 {
00318 if (type == "local") return ENUM_LOCATIONTYPE_local;
00319 if (type == "http" ) return ENUM_LOCATIONTYPE_http;
00320 if (type == "ftp" ) return ENUM_LOCATIONTYPE_ftp;
00321 return 0;
00322 }
00323
00324 inline bool verifyLocationType(std::string type)
00325 {
00326 return (returnLocationType(type) > 0);
00327 }
00328
00329 enum ENUM_TRANSPORT_TYPE
00330 {
00331 ENUM_TRANSPORT_TYPE_osp = 1,
00332 ENUM_TRANSPORT_TYPE_http,
00333 ENUM_TRANSPORT_TYPE_smtp,
00334 ENUM_TRANSPORT_TYPE_ftp,
00335 ENUM_TRANSPORT_TYPE_other
00336 };
00337
00338 inline int returnTransportType(std::string type)
00339 {
00340 if (type == "osp" ) return ENUM_TRANSPORT_TYPE_osp;
00341 if (type == "http" ) return ENUM_TRANSPORT_TYPE_http;
00342 if (type == "smtp" ) return ENUM_TRANSPORT_TYPE_smtp;
00343 if (type == "ftp" ) return ENUM_TRANSPORT_TYPE_ftp;
00344 if (type == "other") return ENUM_TRANSPORT_TYPE_other;
00345 return 0;
00346 }
00347
00348 inline bool verifyTransportType(std::string type)
00349 {
00350 return (returnTransportType(type) > 0);
00351 }
00352
00353 enum ENUM_SERVICE_TYPE
00354 {
00355 ENUM_SERVICE_TYPE_analyzer = 1,
00356 ENUM_SERVICE_TYPE_solver,
00357 ENUM_SERVICE_TYPE_scheduler,
00358 ENUM_SERVICE_TYPE_modeler,
00359 ENUM_SERVICE_TYPE_registry,
00360 ENUM_SERVICE_TYPE_agent,
00361 ENUM_SERVICE_TYPE_simulations
00362 };
00363
00364 inline int returnServiceType(std::string type)
00365 {
00366 if (type == "analyzer" ) return ENUM_SERVICE_TYPE_analyzer;
00367 if (type == "solver" ) return ENUM_SERVICE_TYPE_solver;
00368 if (type == "scheduler" ) return ENUM_SERVICE_TYPE_scheduler;
00369 if (type == "modeler" ) return ENUM_SERVICE_TYPE_modeler;
00370 if (type == "registry" ) return ENUM_SERVICE_TYPE_registry;
00371 if (type == "agent" ) return ENUM_SERVICE_TYPE_agent;
00372 if (type == "simulations") return ENUM_SERVICE_TYPE_simulations;
00373 return 0;
00374 }
00375
00376 inline bool verifyServiceType(std::string type)
00377 {
00378 return (returnServiceType(type) > 0);
00379 }
00380
00381 enum ENUM_GENERAL_RESULT_STATUS
00382 {
00383 ENUM_GENERAL_RESULT_STATUS_error = 1,
00384 ENUM_GENERAL_RESULT_STATUS_warning,
00385 ENUM_GENERAL_RESULT_STATUS_normal
00386 };
00387
00388 inline int returnGeneralResultStatus(std::string status)
00389 {
00390 if (status == "error" ) return ENUM_GENERAL_RESULT_STATUS_error;
00391 if (status == "warning") return ENUM_GENERAL_RESULT_STATUS_warning;
00392 if (status == "normal" ) return ENUM_GENERAL_RESULT_STATUS_normal;
00393 return 0;
00394 }
00395
00396 inline bool verifyGeneralResultStatus(std::string status)
00397 {
00398 return (returnGeneralResultStatus(status) > 0);
00399 }
00400
00401 enum ENUM_SYSTEM_CURRENT_STATE
00402 {
00403 ENUM_SYSTEM_CURRENT_STATE_busy = 1,
00404 ENUM_SYSTEM_CURRENT_STATE_busyButAccepting,
00405 ENUM_SYSTEM_CURRENT_STATE_idle,
00406 ENUM_SYSTEM_CURRENT_STATE_idleButNotAccepting,
00407 ENUM_SYSTEM_CURRENT_STATE_noResponse
00408 };
00409
00410 inline int returnSystemCurrentState(std::string status)
00411 {
00412 if (status == "busy" ) return ENUM_SYSTEM_CURRENT_STATE_busy;
00413 if (status == "busyButAccepting" ) return ENUM_SYSTEM_CURRENT_STATE_busyButAccepting;
00414 if (status == "idle" ) return ENUM_SYSTEM_CURRENT_STATE_idle;
00415 if (status == "idleButNotAccepting") return ENUM_SYSTEM_CURRENT_STATE_idleButNotAccepting;
00416 if (status == "noResponse" ) return ENUM_SYSTEM_CURRENT_STATE_noResponse;
00417 return 0;
00418 }
00419
00420 inline bool verifySystemCurrentState(std::string status)
00421 {
00422 return (returnSystemCurrentState(status) > 0);
00423 }
00424
00425 enum ENUM_JOB_STATUS
00426 {
00427 ENUM_JOB_STATUS_waiting = 1,
00428 ENUM_JOB_STATUS_running,
00429 ENUM_JOB_STATUS_killed,
00430 ENUM_JOB_STATUS_finished,
00431 ENUM_JOB_STATUS_unknown
00432 };
00433
00434 inline int returnJobStatus(std::string status)
00435 {
00436 if (status == "waiting" ) return ENUM_JOB_STATUS_waiting;
00437 if (status == "running" ) return ENUM_JOB_STATUS_running;
00438 if (status == "killed" ) return ENUM_JOB_STATUS_killed;
00439 if (status == "finished") return ENUM_JOB_STATUS_finished;
00440 if (status == "unknown" ) return ENUM_JOB_STATUS_unknown;
00441 return 0;
00442 }
00443
00444 inline bool verifyJobStatus(std::string status)
00445 {
00446 return (returnJobStatus(status) > 0);
00447 }
00448
00456 enum ENUM_BASIS_STATUS
00457 {
00458 ENUM_BASIS_STATUS_basic = 0,
00459 ENUM_BASIS_STATUS_atLower,
00460 ENUM_BASIS_STATUS_atUpper,
00461 ENUM_BASIS_STATUS_atEquality,
00462 ENUM_BASIS_STATUS_isFree,
00463 ENUM_BASIS_STATUS_superbasic,
00464 ENUM_BASIS_STATUS_unknown,
00465 ENUM_BASIS_STATUS_NUMBER_OF_STATES
00466 };
00467
00468 inline int returnBasisStatus(std::string status)
00469 {
00470 if (status == "basic" ) return ENUM_BASIS_STATUS_basic;
00471 if (status == "atLower" ) return ENUM_BASIS_STATUS_atLower;
00472 if (status == "atUpper" ) return ENUM_BASIS_STATUS_atUpper;
00473 if (status == "atEquality") return ENUM_BASIS_STATUS_atEquality;
00474 if (status == "isFree" ) return ENUM_BASIS_STATUS_isFree;
00475 if (status == "superBasic") return ENUM_BASIS_STATUS_superbasic;
00476 if (status == "unknown" ) return ENUM_BASIS_STATUS_unknown;
00477 return 0;
00478 }
00479
00480 inline bool verifyBasisStatus(std::string status)
00481 {
00482 return (returnBasisStatus(status) > 0);
00483 }
00484
00485 inline std::string returnBasisStatusString(ENUM_BASIS_STATUS status)
00486 {
00487 if (status == ENUM_BASIS_STATUS_basic ) return "basic";
00488 if (status == ENUM_BASIS_STATUS_atLower ) return "atLower";
00489 if (status == ENUM_BASIS_STATUS_atUpper ) return "atUpper";
00490 if (status == ENUM_BASIS_STATUS_atEquality) return "atEquality";
00491 if (status == ENUM_BASIS_STATUS_isFree ) return "isFree";
00492 if (status == ENUM_BASIS_STATUS_superbasic) return "superBasic";
00493 if (status == ENUM_BASIS_STATUS_unknown ) return "unknown";
00494 return "status???";
00495 }
00496
00497
00498 enum ENUM_SOLUTION_STATUS
00499 {
00500 ENUM_SOLUTION_STATUS_unbounded = 1,
00501 ENUM_SOLUTION_STATUS_globallyOptimal,
00502 ENUM_SOLUTION_STATUS_locallyOptimal,
00503 ENUM_SOLUTION_STATUS_optimal,
00504 ENUM_SOLUTION_STATUS_bestSoFar,
00505 ENUM_SOLUTION_STATUS_feasible,
00506 ENUM_SOLUTION_STATUS_infeasible,
00507 ENUM_SOLUTION_STATUS_unsure,
00508 ENUM_SOLUTION_STATUS_error,
00509 ENUM_SOLUTION_STATUS_other
00510 };
00511
00512 inline int returnSolutionStatus(std::string status)
00513 {
00514 if (status == "unbounded" ) return ENUM_SOLUTION_STATUS_unbounded;
00515 if (status == "globallyOptimal") return ENUM_SOLUTION_STATUS_globallyOptimal;
00516 if (status == "locallyOptimal" ) return ENUM_SOLUTION_STATUS_locallyOptimal;
00517 if (status == "optimal" ) return ENUM_SOLUTION_STATUS_optimal;
00518 if (status == "bestSoFar" ) return ENUM_SOLUTION_STATUS_bestSoFar;
00519 if (status == "feasible" ) return ENUM_SOLUTION_STATUS_feasible;
00520 if (status == "infeasible" ) return ENUM_SOLUTION_STATUS_infeasible;
00521 if (status == "unsure" ) return ENUM_SOLUTION_STATUS_unsure;
00522 if (status == "error" ) return ENUM_SOLUTION_STATUS_error;
00523 if (status == "other" ) return ENUM_SOLUTION_STATUS_other;
00524 return 0;
00525 }
00526
00527 inline bool verifySolutionStatus(std::string status)
00528 {
00529 return (returnSolutionStatus(status) > 0);
00530 }
00531
00532 enum ENUM_SOLUTION_SUBSTATUSTYPE
00533 {
00534 ENUM_SOLUTION_SUBSTATUSTYPE_stoppedByLimit = 1,
00535 ENUM_SOLUTION_SUBSTATUSTYPE_stoppedByBounds,
00536 ENUM_SOLUTION_SUBSTATUSTYPE_other
00537 };
00538
00539 inline int returnSolutionSubstatusType(std::string type)
00540 {
00541 if (type == "stoppedByLimit" ) return ENUM_SOLUTION_SUBSTATUSTYPE_stoppedByLimit;
00542 if (type == "stoppedByBounds") return ENUM_SOLUTION_SUBSTATUSTYPE_stoppedByBounds;
00543 if (type == "other" ) return ENUM_SOLUTION_SUBSTATUSTYPE_other;
00544 return 0;
00545 }
00546
00547 inline bool verifySolutionSubstatusType(std::string type)
00548 {
00549 return (returnSolutionSubstatusType(type) > 0);
00550 }
00551
00552 enum ENUM_PROBLEM_COMPONENT
00553 {
00554 ENUM_PROBLEM_COMPONENT_variables = 1,
00555 ENUM_PROBLEM_COMPONENT_objectives,
00556 ENUM_PROBLEM_COMPONENT_constraints
00557 };
00558
00559 enum ENUM_VARTYPE
00560 {
00561 ENUM_VARTYPE_continuous = 1,
00562 ENUM_VARTYPE_binary,
00563 ENUM_VARTYPE_integer,
00564 ENUM_VARTYPE_string,
00565 ENUM_VARTYPE_semicontinuous,
00566 ENUM_VARTYPE_semiinteger
00567 };
00568
00569 inline int returnVarType(char vt)
00570 {
00571 if (vt == 'C') return ENUM_VARTYPE_continuous;
00572 if (vt == 'B') return ENUM_VARTYPE_binary;
00573 if (vt == 'I') return ENUM_VARTYPE_integer;
00574 if (vt == 'S') return ENUM_VARTYPE_string;
00575 if (vt == 'D') return ENUM_VARTYPE_semicontinuous;
00576 if (vt == 'J') return ENUM_VARTYPE_semiinteger;
00577 return 0;
00578 }
00579
00580 inline bool verifyVarType(char vt)
00581 {
00582 return (returnVarType(vt) > 0);
00583 }
00584
00585
00586 enum ENUM_PATHPAIR
00587 {
00588 ENUM_PATHPAIR_input_dir = 1,
00589 ENUM_PATHPAIR_input_file,
00590 ENUM_PATHPAIR_output_file,
00591 ENUM_PATHPAIR_output_dir
00592 };
00593
00599 enum ENUM_MATRIX_TYPE
00600 {
00601 ENUM_MATRIX_TYPE_empty = 1,
00602
00603 ENUM_MATRIX_TYPE_constant = 10,
00604 ENUM_MATRIX_TYPE_varReference,
00605 ENUM_MATRIX_TYPE_linear,
00606 ENUM_MATRIX_TYPE_quadratic,
00607 ENUM_MATRIX_TYPE_general,
00608
00609 ENUM_MATRIX_TYPE_objReference = 20,
00610 ENUM_MATRIX_TYPE_conReference,
00611 ENUM_MATRIX_TYPE_mixedRowReference,
00612
00613 ENUM_MATRIX_TYPE_string,
00614
00615 ENUM_MATRIX_TYPE_unknown = 99
00616 };
00617
00618 inline int returnMatrixType(std::string type)
00619 {
00620 if (type == "empty" ) return ENUM_MATRIX_TYPE_empty;
00621 if (type == "constant" ) return ENUM_MATRIX_TYPE_constant;
00622 if (type == "varReference" ) return ENUM_MATRIX_TYPE_varReference;
00623 if (type == "linear" ) return ENUM_MATRIX_TYPE_linear;
00624 if (type == "quadratic" ) return ENUM_MATRIX_TYPE_quadratic;
00625 if (type == "general" ) return ENUM_MATRIX_TYPE_general;
00626
00627 if (type == "objReference" ) return ENUM_MATRIX_TYPE_objReference;
00628 if (type == "conReference" ) return ENUM_MATRIX_TYPE_conReference;
00629 if (type == "mixedRowReference") return ENUM_MATRIX_TYPE_mixedRowReference;
00630
00631 if (type == "string" ) return ENUM_MATRIX_TYPE_string;
00632
00633 if (type == "unknown" ) return ENUM_MATRIX_TYPE_unknown;
00634 return 0;
00635 }
00636
00637 inline std::string returnMatrixTypeString(ENUM_MATRIX_TYPE type)
00638 {
00639 if (type == ENUM_MATRIX_TYPE_empty) return "empty";
00640 if (type == ENUM_MATRIX_TYPE_constant) return "constant";
00641 if (type == ENUM_MATRIX_TYPE_varReference) return "varReference";
00642 if (type == ENUM_MATRIX_TYPE_linear) return "linear";
00643 if (type == ENUM_MATRIX_TYPE_quadratic) return "quadratic";
00644 if (type == ENUM_MATRIX_TYPE_general) return "general";
00645 if (type == ENUM_MATRIX_TYPE_objReference) return "objReference";
00646 if (type == ENUM_MATRIX_TYPE_conReference) return "conReference";
00647 if (type == ENUM_MATRIX_TYPE_mixedRowReference) return "mixedRowReference";
00648 if (type == ENUM_MATRIX_TYPE_unknown) return "unknown";
00649 if (type == ENUM_MATRIX_TYPE_string) return "string";
00650 return "unknown";
00651 }
00652
00653 inline bool verifyMatrixType(std::string type)
00654 {
00655 return (returnMatrixType(type) > 0);
00656 }
00657
00661 inline ENUM_MATRIX_TYPE mergeMatrixType(ENUM_MATRIX_TYPE type1, ENUM_MATRIX_TYPE type2)
00662 {
00663
00664 if (type1 == type2) return type1;
00665
00666 if (type1 == ENUM_MATRIX_TYPE_string || type2 == ENUM_MATRIX_TYPE_string)
00667 return ENUM_MATRIX_TYPE_string;
00668
00669 if (type1 == ENUM_MATRIX_TYPE_unknown) return type2;
00670 if (type2 == ENUM_MATRIX_TYPE_unknown) return type1;
00671 if (type1 == ENUM_MATRIX_TYPE_empty) return type2;
00672 if (type2 == ENUM_MATRIX_TYPE_empty) return type1;
00673
00674
00675 if (type1 >= ENUM_MATRIX_TYPE_conReference)
00676 {
00677 if (type2 >= ENUM_MATRIX_TYPE_conReference)
00678 return ENUM_MATRIX_TYPE_mixedRowReference;
00679 else
00680 return ENUM_MATRIX_TYPE_general;
00681 }
00682 else
00683 {
00684 if (type2 >= ENUM_MATRIX_TYPE_conReference) return ENUM_MATRIX_TYPE_general;
00685 else
00686 if (type1 < type2)
00687 if (type2 == ENUM_MATRIX_TYPE_varReference)
00688 return ENUM_MATRIX_TYPE_linear;
00689 else
00690 return type2;
00691 else
00692 if (type1 == ENUM_MATRIX_TYPE_varReference)
00693 return ENUM_MATRIX_TYPE_linear;
00694 else
00695 return type1;
00696 }
00697 return ENUM_MATRIX_TYPE_unknown;
00698 }
00699
00703 enum ENUM_CONREFERENCE_VALUETYPE
00704 {
00705 ENUM_CONREFERENCE_VALUETYPE_value = 1,
00706 ENUM_CONREFERENCE_VALUETYPE_status,
00707 ENUM_CONREFERENCE_VALUETYPE_surplus,
00708 ENUM_CONREFERENCE_VALUETYPE_shortage
00709 };
00710
00711 inline std::string returnConReferenceValueTypeString(ENUM_CONREFERENCE_VALUETYPE valueType)
00712 {
00713 if (valueType == ENUM_CONREFERENCE_VALUETYPE_value ) return "none";
00714 if (valueType == ENUM_CONREFERENCE_VALUETYPE_status ) return "status";
00715 if (valueType == ENUM_CONREFERENCE_VALUETYPE_surplus ) return "surplus";
00716 if (valueType == ENUM_CONREFERENCE_VALUETYPE_shortage) return "shortage";
00717 return "none";
00718 }
00719
00720 inline int returnConReferenceValueType(std::string valueType)
00721 {
00722 if (valueType == "value" ) return ENUM_CONREFERENCE_VALUETYPE_value;
00723 if (valueType == "status" ) return ENUM_CONREFERENCE_VALUETYPE_status;
00724 if (valueType == "surplus" ) return ENUM_CONREFERENCE_VALUETYPE_surplus;
00725 if (valueType == "shortage" ) return ENUM_CONREFERENCE_VALUETYPE_shortage;
00726 return 0;
00727 }
00728
00729 inline bool verifyConReferenceValueType(std::string valueType)
00730 {
00731 return (returnConReferenceValueType(valueType) > 0);
00732 }
00733
00734
00735 enum ENUM_MATRIX_SYMMETRY
00736 {
00737 ENUM_MATRIX_SYMMETRY_none = 1,
00738 ENUM_MATRIX_SYMMETRY_upper,
00739 ENUM_MATRIX_SYMMETRY_lower,
00740 ENUM_MATRIX_SYMMETRY_skewUpper,
00741 ENUM_MATRIX_SYMMETRY_skewLower,
00742 ENUM_MATRIX_SYMMETRY_HermitianLower,
00743 ENUM_MATRIX_SYMMETRY_HermitianUpper
00744 };
00745
00746 inline std::string returnMatrixSymmetryString(ENUM_MATRIX_SYMMETRY symmetry)
00747 {
00748 if (symmetry == ENUM_MATRIX_SYMMETRY_none ) return "none";
00749 if (symmetry == ENUM_MATRIX_SYMMETRY_upper ) return "upper";
00750 if (symmetry == ENUM_MATRIX_SYMMETRY_lower ) return "lower";
00751 if (symmetry == ENUM_MATRIX_SYMMETRY_skewUpper ) return "skewUpper";
00752 if (symmetry == ENUM_MATRIX_SYMMETRY_skewLower ) return "skewLower";
00753 if (symmetry == ENUM_MATRIX_SYMMETRY_HermitianLower) return "HermitianLower";
00754 if (symmetry == ENUM_MATRIX_SYMMETRY_HermitianLower) return "HermitianLower";
00755 return "none";
00756 }
00757
00758 inline int returnMatrixSymmetry(std::string symmetry)
00759 {
00760 if (symmetry == "none" ) return ENUM_MATRIX_SYMMETRY_none;
00761 if (symmetry == "upper" ) return ENUM_MATRIX_SYMMETRY_upper;
00762 if (symmetry == "lower" ) return ENUM_MATRIX_SYMMETRY_lower;
00763 if (symmetry == "skewUpper" ) return ENUM_MATRIX_SYMMETRY_skewUpper;
00764 if (symmetry == "skewLower" ) return ENUM_MATRIX_SYMMETRY_skewLower;
00765 if (symmetry == "HermitianLower") return ENUM_MATRIX_SYMMETRY_HermitianLower;
00766 if (symmetry == "HermitianLower") return ENUM_MATRIX_SYMMETRY_HermitianLower;
00767 return 0;
00768 }
00769
00770 inline bool verifyMatrixSymmetry(std::string symmetry)
00771 {
00772 return (returnMatrixSymmetry(symmetry) > 0);
00773 }
00774
00775
00776 enum ENUM_MATRIX_CONSTRUCTOR_TYPE
00777 {
00778 ENUM_MATRIX_CONSTRUCTOR_TYPE_unknown = 0,
00779 ENUM_MATRIX_CONSTRUCTOR_TYPE_baseMatrix,
00780 ENUM_MATRIX_CONSTRUCTOR_TYPE_constantElements,
00781 ENUM_MATRIX_CONSTRUCTOR_TYPE_varRefElements,
00782 ENUM_MATRIX_CONSTRUCTOR_TYPE_linearElements,
00783 ENUM_MATRIX_CONSTRUCTOR_TYPE_generalElements,
00784 ENUM_MATRIX_CONSTRUCTOR_TYPE_objRefElements,
00785 ENUM_MATRIX_CONSTRUCTOR_TYPE_conRefElements,
00786 ENUM_MATRIX_CONSTRUCTOR_TYPE_mixedRowRefElements,
00787 ENUM_MATRIX_CONSTRUCTOR_TYPE_stringValuedElements,
00788 ENUM_MATRIX_CONSTRUCTOR_TYPE_transformation,
00789 ENUM_MATRIX_CONSTRUCTOR_TYPE_blocks,
00790 ENUM_MATRIX_CONSTRUCTOR_TYPE_block,
00791 ENUM_MATRIX_CONSTRUCTOR_TYPE_matrix
00792 };
00793
00794 inline int returnMatrixConstructorType(std::string cType)
00795 {
00796 if (cType == "baseMatrix" ) return ENUM_MATRIX_CONSTRUCTOR_TYPE_baseMatrix;
00797 if (cType == "constantElements" ) return ENUM_MATRIX_CONSTRUCTOR_TYPE_constantElements;
00798 if (cType == "varRefElements" ) return ENUM_MATRIX_CONSTRUCTOR_TYPE_varRefElements;
00799 if (cType == "linearElements" ) return ENUM_MATRIX_CONSTRUCTOR_TYPE_linearElements;
00800 if (cType == "generalElements" ) return ENUM_MATRIX_CONSTRUCTOR_TYPE_generalElements;
00801 if (cType == "objRefElements" ) return ENUM_MATRIX_CONSTRUCTOR_TYPE_objRefElements;
00802 if (cType == "conRefElements" ) return ENUM_MATRIX_CONSTRUCTOR_TYPE_conRefElements;
00803 if (cType == "stringElements" ) return ENUM_MATRIX_CONSTRUCTOR_TYPE_stringValuedElements;
00804 if (cType == "transformation" ) return ENUM_MATRIX_CONSTRUCTOR_TYPE_transformation;
00805 if (cType == "blocks" ) return ENUM_MATRIX_CONSTRUCTOR_TYPE_blocks;
00806 if (cType == "block" ) return ENUM_MATRIX_CONSTRUCTOR_TYPE_block;
00807 if (cType == "matrix" ) return ENUM_MATRIX_CONSTRUCTOR_TYPE_matrix;
00808 return 0;
00809 }
00810
00811 inline bool verifyMatrixConstructorType(std::string type)
00812 {
00813 return (returnMatrixConstructorType(type) > 0);
00814 }
00815
00816
00820 enum ENUM_COMBINE_ARRAYS
00821 {
00822 ENUM_COMBINE_ARRAYS_replace,
00823 ENUM_COMBINE_ARRAYS_merge,
00824 ENUM_COMBINE_ARRAYS_ignore,
00825 ENUM_COMBINE_ARRAYS_throw
00826 };
00827
00828
00829
00830 enum ENUM_NL_EXPR_SHAPE
00831 {
00832 ENUM_NL_EXPR_SHAPE_general = 1,
00833 ENUM_NL_EXPR_SHAPE_convex,
00834 ENUM_NL_EXPR_SHAPE_quadratic,
00835 ENUM_NL_EXPR_SHAPE_linear,
00836 ENUM_NL_EXPR_SHAPE_constant
00837 };
00838
00839 inline int returnNlExprShape(std::string shape)
00840 {
00841 if (shape == "general" ) return ENUM_NL_EXPR_SHAPE_general;
00842 if (shape == "convex" ) return ENUM_NL_EXPR_SHAPE_convex;
00843 if (shape == "quadratic") return ENUM_NL_EXPR_SHAPE_quadratic;
00844 if (shape == "linear" ) return ENUM_NL_EXPR_SHAPE_linear;
00845 if (shape == "constant" ) return ENUM_NL_EXPR_SHAPE_constant;
00846 return 1;
00847 }
00848
00849 inline std::string returnExprShapeString(ENUM_NL_EXPR_SHAPE shape)
00850 {
00851 if (shape == ENUM_NL_EXPR_SHAPE_general ) return "general";
00852 if (shape == ENUM_NL_EXPR_SHAPE_convex ) return "convex";
00853 if (shape == ENUM_NL_EXPR_SHAPE_quadratic) return "quadratic";
00854 if (shape == ENUM_NL_EXPR_SHAPE_linear ) return "linear";
00855 if (shape == ENUM_NL_EXPR_SHAPE_constant ) return "constant";
00856 return "";
00857 }
00858
00859 inline bool verifyNlExprShape(std::string shape)
00860 {
00861 return (returnNlExprShape(shape) > 0);
00862 }
00863
00864
00865 enum ENUM_CONE_TYPE
00866 {
00867 ENUM_CONE_TYPE_nonnegative = 1,
00868 ENUM_CONE_TYPE_nonpositive,
00869 ENUM_CONE_TYPE_orthant,
00870 ENUM_CONE_TYPE_polyhedral,
00871 ENUM_CONE_TYPE_quadratic,
00872 ENUM_CONE_TYPE_rotatedQuadratic,
00873 ENUM_CONE_TYPE_normed,
00874 ENUM_CONE_TYPE_rotatedNormed,
00875 ENUM_CONE_TYPE_semidefinite,
00876 ENUM_CONE_TYPE_copositiveMatrices,
00877 ENUM_CONE_TYPE_completelyPositiveMatrices,
00878 ENUM_CONE_TYPE_hyperbolicity,
00879 ENUM_CONE_TYPE_sumOfSquaresPolynomials,
00880 ENUM_CONE_TYPE_nonnegativePolynomials,
00881 ENUM_CONE_TYPE_moments,
00882 ENUM_CONE_TYPE_product,
00883 ENUM_CONE_TYPE_intersection,
00884 ENUM_CONE_TYPE_dual,
00885 ENUM_CONE_TYPE_polar,
00886 ENUM_CONE_TYPE_unknown
00887 };
00888
00889 inline int returnConeType(std::string type)
00890 {
00891 if (type == "nonnegative" ) return ENUM_CONE_TYPE_nonnegative;
00892 if (type == "nonpositive" ) return ENUM_CONE_TYPE_nonpositive;
00893 if (type == "orthant" ) return ENUM_CONE_TYPE_orthant;
00894 if (type == "polyhedral" ) return ENUM_CONE_TYPE_polyhedral;
00895 if (type == "quadratic" ) return ENUM_CONE_TYPE_quadratic;
00896
00897 if (type == "rotatedQuadratic" ) return ENUM_CONE_TYPE_rotatedQuadratic;
00898 if (type == "normed" ) return ENUM_CONE_TYPE_normed;
00899 if (type == "rotatedNormed" ) return ENUM_CONE_TYPE_rotatedNormed;
00900 if (type == "semidefinite" ) return ENUM_CONE_TYPE_semidefinite;
00901 if (type == "copositiveMatrices" ) return ENUM_CONE_TYPE_copositiveMatrices;
00902 if (type == "completelyPositiveMatrices") return ENUM_CONE_TYPE_completelyPositiveMatrices;
00903 if (type == "hyperbolicity" ) return ENUM_CONE_TYPE_hyperbolicity;
00904 if (type == "sumOfSquaresPolynomials" ) return ENUM_CONE_TYPE_sumOfSquaresPolynomials;
00905 if (type == "nonnegativePolynomials" ) return ENUM_CONE_TYPE_nonnegativePolynomials;
00906 if (type == "moments" ) return ENUM_CONE_TYPE_moments;
00907 if (type == "product" ) return ENUM_CONE_TYPE_product;
00908 if (type == "intersection" ) return ENUM_CONE_TYPE_intersection;
00909 if (type == "dual" ) return ENUM_CONE_TYPE_dual;
00910 if (type == "polar" ) return ENUM_CONE_TYPE_polar;
00911 if (type == "unknown" ) return ENUM_CONE_TYPE_unknown;
00912 return 0;
00913 }
00914
00915 inline bool verifyConeType(std::string type)
00916 {
00917 return (returnConeType(type) > 0);
00918 }
00919
00920
00921 #endif