00001
00002 #ifndef __QSopt_ex__
00003 #define __QSopt_ex__
00004
00005
00006
00007 #ifndef DEBUG
00008 #define DEBUG 1
00009 #endif
00010
00011
00012 #ifndef ENABLE_LONG_DOUBLE
00013 #define ENABLE_LONG_DOUBLE 1
00014 #endif
00015
00016
00017 #ifndef HAVE_ASSERT_H
00018 #define HAVE_ASSERT_H 1
00019 #endif
00020
00021
00022 #ifndef HAVE_BZLIB_H
00023 #define HAVE_BZLIB_H 1
00024 #endif
00025
00026
00027 #ifndef HAVE_CLOCK
00028 #define HAVE_CLOCK 1
00029 #endif
00030
00031
00032
00033 #ifndef HAVE_DOPRNT
00034
00035 #endif
00036
00037
00038 #ifndef HAVE_EGLIB_H
00039 #define HAVE_EGLIB_H 1
00040 #endif
00041
00042
00043 #ifndef HAVE_ERRNO_H
00044 #define HAVE_ERRNO_H 1
00045 #endif
00046
00047
00048 #ifndef HAVE_FCNTL_H
00049 #define HAVE_FCNTL_H 1
00050 #endif
00051
00052
00053 #ifndef HAVE_FLOAT_H
00054 #define HAVE_FLOAT_H 1
00055 #endif
00056
00057
00058 #ifndef HAVE_FLOOR
00059 #define HAVE_FLOOR 1
00060 #endif
00061
00062
00063 #ifndef HAVE_GETRUSAGE
00064 #define HAVE_GETRUSAGE 1
00065 #endif
00066
00067
00068 #ifndef HAVE_GMP_H
00069 #define HAVE_GMP_H 1
00070 #endif
00071
00072
00073 #ifndef HAVE_INTTYPES_H
00074 #define HAVE_INTTYPES_H 1
00075 #endif
00076
00077 #ifndef HAVE_LIBGMP
00078 #define HAVE_LIBGMP 1
00079 #endif
00080
00081
00082 #ifndef HAVE_LIBM
00083 #define HAVE_LIBM 1
00084 #endif
00085
00086
00087 #ifndef HAVE_LIBNSL
00088
00089 #endif
00090
00091
00092 #ifndef HAVE_LIBPTHREAD
00093 #define HAVE_LIBPTHREAD 1
00094 #endif
00095
00096
00097 #ifndef HAVE_LIBRESOLV
00098 #define HAVE_LIBRESOLV 1
00099 #endif
00100
00101
00102 #ifndef HAVE_LIBZ
00103 #define HAVE_LIBZ 1
00104 #endif
00105
00106
00107 #ifndef HAVE_LIMITS_H
00108 #define HAVE_LIMITS_H 1
00109 #endif
00110
00111
00112 #ifndef HAVE_LONG_DOUBLE
00113 #define HAVE_LONG_DOUBLE 1
00114 #endif
00115
00116
00117
00118 #ifndef HAVE_MALLOC
00119 #define HAVE_MALLOC 1
00120 #endif
00121
00122
00123 #ifndef HAVE_MALLOC_H
00124 #define HAVE_MALLOC_H 1
00125 #endif
00126
00127
00128 #ifndef HAVE_MATH_H
00129 #define HAVE_MATH_H 1
00130 #endif
00131
00132
00133 #ifndef HAVE_MEMORY_H
00134 #define HAVE_MEMORY_H 1
00135 #endif
00136
00137
00138 #ifndef HAVE_MEMSET
00139 #define HAVE_MEMSET 1
00140 #endif
00141
00142
00143 #ifndef HAVE_NETDB_H
00144 #define HAVE_NETDB_H 1
00145 #endif
00146
00147
00148 #ifndef HAVE_NETINET_IN_H
00149 #define HAVE_NETINET_IN_H 1
00150 #endif
00151
00152
00153 #ifndef HAVE_POW
00154 #define HAVE_POW 1
00155 #endif
00156
00157
00158
00159 #ifndef HAVE_REALLOC
00160 #define HAVE_REALLOC 1
00161 #endif
00162
00163
00164 #ifndef HAVE_SETJMP_H
00165 #define HAVE_SETJMP_H 1
00166 #endif
00167
00168
00169 #ifndef HAVE_SIGACTION
00170 #define HAVE_SIGACTION 1
00171 #endif
00172
00173
00174 #ifndef HAVE_SIGNAL
00175 #define HAVE_SIGNAL 1
00176 #endif
00177
00178
00179 #ifndef HAVE_SIGNAL_H
00180 #define HAVE_SIGNAL_H 1
00181 #endif
00182
00183
00184 #ifndef HAVE_SLEEP
00185 #define HAVE_SLEEP 1
00186 #endif
00187
00188
00189 #ifndef HAVE_SOFTFLOAT
00190 #define HAVE_SOFTFLOAT 1
00191 #endif
00192
00193
00194 #ifndef HAVE_SQRT
00195 #define HAVE_SQRT 1
00196 #endif
00197
00198
00199 #ifndef HAVE_STDARG_H
00200 #define HAVE_STDARG_H 1
00201 #endif
00202
00203
00204 #ifndef HAVE_STDDEF_H
00205 #define HAVE_STDDEF_H 1
00206 #endif
00207
00208
00209 #ifndef HAVE_STDINT_H
00210 #define HAVE_STDINT_H 1
00211 #endif
00212
00213
00214 #ifndef HAVE_STDIO_H
00215 #define HAVE_STDIO_H 1
00216 #endif
00217
00218
00219 #ifndef HAVE_STDLIB_H
00220 #define HAVE_STDLIB_H 1
00221 #endif
00222
00223
00224 #ifndef HAVE_STRDUP
00225 #define HAVE_STRDUP 1
00226 #endif
00227
00228
00229 #ifndef HAVE_STRERROR
00230 #define HAVE_STRERROR 1
00231 #endif
00232
00233
00234 #ifndef HAVE_STRINGS_H
00235 #define HAVE_STRINGS_H 1
00236 #endif
00237
00238
00239 #ifndef HAVE_STRING_H
00240 #define HAVE_STRING_H 1
00241 #endif
00242
00243
00244 #ifndef HAVE_SYS_PARAM_H
00245 #define HAVE_SYS_PARAM_H 1
00246 #endif
00247
00248
00249 #ifndef HAVE_SYS_RESOURCE_H
00250 #define HAVE_SYS_RESOURCE_H 1
00251 #endif
00252
00253
00254 #ifndef HAVE_SYS_SOCKET_H
00255 #define HAVE_SYS_SOCKET_H 1
00256 #endif
00257
00258
00259 #ifndef HAVE_SYS_STAT_H
00260 #define HAVE_SYS_STAT_H 1
00261 #endif
00262
00263
00264 #ifndef HAVE_SYS_TIMES_H
00265 #define HAVE_SYS_TIMES_H 1
00266 #endif
00267
00268
00269 #ifndef HAVE_SYS_TIME_H
00270 #define HAVE_SYS_TIME_H 1
00271 #endif
00272
00273
00274 #ifndef HAVE_SYS_TYPES_H
00275 #define HAVE_SYS_TYPES_H 1
00276 #endif
00277
00278
00279 #ifndef HAVE_SYS_UTSNAME_H
00280 #define HAVE_SYS_UTSNAME_H 1
00281 #endif
00282
00283
00284 #ifndef HAVE_TIMES
00285 #define HAVE_TIMES 1
00286 #endif
00287
00288
00289 #ifndef HAVE_TIME_H
00290 #define HAVE_TIME_H 1
00291 #endif
00292
00293
00294 #ifndef HAVE_TYPEOF
00295 #define HAVE_TYPEOF 1
00296 #endif
00297
00298
00299 #ifndef HAVE_UNISTD_H
00300 #define HAVE_UNISTD_H 1
00301 #endif
00302
00303
00304 #ifndef HAVE_VPRINTF
00305 #define HAVE_VPRINTF 1
00306 #endif
00307
00308
00309 #ifndef HAVE_ZLIB_H
00310 #define HAVE_ZLIB_H 1
00311 #endif
00312
00313
00314 #ifndef PACKAGE_BUGREPORT
00315 #define PACKAGE_BUGREPORT "daespino@gmail.com"
00316 #endif
00317
00318
00319 #ifndef PACKAGE_NAME
00320 #define PACKAGE_NAME "QSopt_ex"
00321 #endif
00322
00323
00324 #ifndef PACKAGE_STRING
00325 #define PACKAGE_STRING "QSopt_ex 2.5.10"
00326 #endif
00327
00328
00329 #ifndef PACKAGE_TARNAME
00330 #define PACKAGE_TARNAME "-qsopt_ex-"
00331 #endif
00332
00333
00334 #ifndef PACKAGE_VERSION
00335 #define PACKAGE_VERSION "2.5.10"
00336 #endif
00337
00338
00339 #ifndef RETSIGTYPE
00340 #define RETSIGTYPE void
00341 #endif
00342
00343
00344 #ifndef STDC_HEADERS
00345 #define STDC_HEADERS 1
00346 #endif
00347
00348
00349 #ifndef TIME_WITH_SYS_TIME
00350 #define TIME_WITH_SYS_TIME 1
00351 #endif
00352
00353
00354 #ifndef VERBOSE_LEVEL
00355 #define VERBOSE_LEVEL 100
00356 #endif
00357
00358
00359
00360
00361 #ifndef _ALL_SOURCE
00362 # define _ALL_SOURCE 1
00363 #endif
00364
00365
00366 #ifndef _GNU_SOURCE
00367 # define _GNU_SOURCE 1
00368 #endif
00369
00370
00371 #ifndef _MINIX
00372
00373 #endif
00374
00375
00376
00377 #ifndef _POSIX_1_SOURCE
00378
00379 #endif
00380
00381
00382 #ifndef _POSIX_SOURCE
00383
00384 #endif
00385
00386
00387
00388
00389 #ifndef _UINT32_T
00390
00391 #endif
00392
00393
00394
00395
00396 #ifndef _UINT64_T
00397
00398 #endif
00399
00400
00401
00402
00403 #ifndef _UINT8_T
00404
00405 #endif
00406
00407
00408 #ifndef _XOPEN_SOURCE
00409 #define _XOPEN_SOURCE 600
00410 #endif
00411
00412
00413 #ifndef __EXTENSIONS__
00414 # define __EXTENSIONS__ 1
00415 #endif
00416 #ifndef _POSIX_PTHREAD_SEMANTICS
00417 # define _POSIX_PTHREAD_SEMANTICS 1
00418 #endif
00419 #ifndef _TANDEM_SOURCE
00420 # define _TANDEM_SOURCE 1
00421 #endif
00422
00423
00424 #ifndef const
00425
00426 #endif
00427
00428
00429
00430 #ifndef __cplusplus
00431 #ifndef inline
00432
00433 #endif
00434 #endif
00435
00436
00437
00438 #ifndef int16_t
00439
00440 #endif
00441
00442
00443
00444 #ifndef int32_t
00445
00446 #endif
00447
00448
00449
00450 #ifndef int64_t
00451
00452 #endif
00453
00454
00455
00456 #ifndef int8_t
00457
00458 #endif
00459
00460
00461 #ifndef malloc
00462
00463 #endif
00464
00465
00466 #ifndef pid_t
00467
00468 #endif
00469
00470
00471 #ifndef realloc
00472
00473 #endif
00474
00475
00476
00477 #ifndef restrict
00478 #define restrict __restrict
00479 #endif
00480
00481
00482 #ifndef size_t
00483
00484 #endif
00485
00486
00487 #ifndef ssize_t
00488
00489 #endif
00490
00491
00492 #ifndef typeof
00493
00494 #endif
00495
00496
00497
00498 #ifndef uint16_t
00499
00500 #endif
00501
00502
00503
00504 #ifndef uint32_t
00505
00506 #endif
00507
00508
00509
00510 #ifndef uint64_t
00511
00512 #endif
00513
00514
00515
00516 #ifndef uint8_t
00517
00518 #endif
00519
00520
00521
00522 #ifndef volatile
00523
00524 #endif
00525
00526
00527
00528
00529
00530
00531
00532
00533
00534
00535
00536
00537
00538
00539
00540
00541
00542
00543
00544
00545
00546 #ifndef __BASICDEFS__
00547 #define __BASICDEFS__
00548
00549
00550 #define DENSE 0
00551 #define SPARSE 1
00552
00553
00554 #define ROW_SOLVE 1
00555 #define COLUMN_SOLVE 2
00556
00557
00558 #define VINCREASE 1
00559 #define VDECREASE 2
00560
00561
00562 #define STAT_BASIC 1
00563 #define STAT_UPPER 2
00564 #define STAT_LOWER 3
00565 #define STAT_ZERO 4
00566
00567 #define BOUND_LOWER 1
00568 #define BOUND_UPPER 2
00569
00570
00571 #define VARTIFICIAL 1
00572 #define VFIXED 2
00573 #define VFREE 4
00574 #define VUPPER 8
00575 #define VLOWER 16
00576 #define VBOUNDED 32
00577
00578
00579 #define CLASS_STRUCT 0
00580 #define CLASS_LOGICAL 1
00581
00582
00583 #define PRIMAL_SIMPLEX 1
00584 #define DUAL_SIMPLEX 2
00585 #define PRIMAL_OR_DUAL 3
00586
00587
00588 #define PRIMAL_PHASEI 1
00589 #define PRIMAL_PHASEII 2
00590 #define DUAL_PHASEI 3
00591 #define DUAL_PHASEII 4
00592
00593
00594 #define PHASEI 1
00595 #define PHASEII 2
00596
00597
00598 #define COMPLETE_PRICING 1
00599 #define PARTIAL_PRICING 2
00600 #define MULTI_PART_PRICING 3
00601
00602
00603
00604 #define QS_DEFAULT_PRICE_PI QS_PRICE_PSTEEP
00605 #define QS_DEFAULT_PRICE_PII QS_PRICE_PSTEEP
00606 #define QS_DEFAULT_PRICE_DI QS_PRICE_DSTEEP
00607 #define QS_DEFAULT_PRICE_DII QS_PRICE_DSTEEP
00608
00609
00610 #define ILL_LP_SOLVED 1
00611 #define ILL_LP_UNSOLVED 2
00612 #define ILL_MAX_ITER 3
00613 #define ILL_MAX_TIME 4
00614 #define ILL_BND_REACHED 5
00615 #define ILL_PPHASEI_ERROR 6
00616 #define ILL_PPHASEII_ERROR 7
00617 #define ILL_DPHASEI_ERROR 8
00618 #define ILL_DPHASEII_ERROR 9
00619 #define ILL_LP_ABORTED 10
00620
00621
00622 #define OPTIMAL 1
00623 #define NONOPTIMAL 2
00624 #define PRIMAL_FEASIBLE 3
00625 #define PRIMAL_INFEASIBLE 4
00626 #define PRIMAL_UNBOUNDED 5
00627 #define DUAL_FEASIBLE 7
00628 #define DUAL_INFEASIBLE 8
00629 #define DUAL_UNBOUNDED 9
00630
00631
00632 #define RATIOTEST_NORMAL 1
00633 #define RATIOTEST_HARRIS 2
00634
00635
00636 #define PARAM_PRATIOTESTS 10
00637 #define PARAM_DRATIOTESTS 20
00638 #define PARAM_PRIMAL_REFACTORGAP 50
00639 #define PARAM_PRIMAL_RESOLVEGAP 25
00640 #define PARAM_DUAL_REFACTORGAP 100
00641 #define PARAM_DUAL_RESOLVEGAP 25
00642 #define PARAM_MAX_NOSOLVE 500
00643 #define PARAM_MAX_NOPROG 300
00644 #define PARAM_NOPROG_FACTOR 15
00645
00646
00647 #define PARAM_BSHIFT 10
00648 #define PARAM_CSHIFT 10
00649
00650
00651 #define PARAM_HEAP_UTRIGGER 10
00652 #define PARAM_HEAP_RATIO 4.0
00653
00654
00655 #define E_GENERAL_ERROR 1
00656 #define E_INV_LINSOLVE_OPTION 2
00657 #define E_NO_MEMORY 3
00658 #define E_INVALID_OPTION 4
00659 #define E_NULL_ARGUMENT 5
00660 #define E_SIMPLEX_ERROR 6
00661 #define E_BASIS_SINGULAR 7
00662
00663 #ifndef __QS_BASIS__
00664 #define __QS_BASIS__
00665 typedef struct qsbasis
00666 {
00667 int nstruct;
00668 int nrows;
00669 char *cstat;
00670 char *rstat;
00671 }
00672 QSbasis;
00673 #endif
00674
00675 typedef struct itcnt_t
00676 {
00677 int pI_iter;
00678 int pII_iter;
00679 int dI_iter;
00680 int dII_iter;
00681 int tot_iter;
00682 } itcnt_t;
00683
00684 #ifndef QS_DEFINITIONS
00685 #define QS_DEFINITIONS
00686 #define QS_MIN (1)
00687 #define QS_MAX (-1)
00688
00689
00690
00691
00692
00693
00694
00695
00696 #define QS_PARAM_PRIMAL_PRICING 0
00697 #define QS_PARAM_DUAL_PRICING 2
00698 #define QS_PARAM_SIMPLEX_DISPLAY 4
00699 #define QS_PARAM_SIMPLEX_MAX_ITERATIONS 5
00700 #define QS_PARAM_SIMPLEX_MAX_TIME 6
00701 #define QS_PARAM_SIMPLEX_SCALING 7
00702 #define QS_PARAM_OBJULIM 8
00703 #define QS_PARAM_OBJLLIM 9
00704
00705
00706
00707
00708
00709
00710
00711
00712 #define QS_PRICE_PDANTZIG 1
00713 #define QS_PRICE_PDEVEX 2
00714 #define QS_PRICE_PSTEEP 3
00715 #define QS_PRICE_PMULTPARTIAL 4
00716
00717 #define QS_PRICE_DDANTZIG 6
00718 #define QS_PRICE_DSTEEP 7
00719 #define QS_PRICE_DMULTPARTIAL 8
00720 #define QS_PRICE_DDEVEX 9
00721
00722
00723
00724
00725
00726
00727
00728
00729
00730 #define QS_COL_BSTAT_LOWER '0'
00731 #define QS_COL_BSTAT_BASIC '1'
00732 #define QS_COL_BSTAT_UPPER '2'
00733 #define QS_COL_BSTAT_FREE '3'
00734
00735 #define QS_ROW_BSTAT_LOWER '0'
00736 #define QS_ROW_BSTAT_BASIC '1'
00737 #define QS_ROW_BSTAT_UPPER '2'
00738
00739
00740
00741
00742
00743
00744
00745
00746 #define QS_LP_OPTIMAL 1
00747 #define QS_LP_INFEASIBLE 2
00748 #define QS_LP_UNBOUNDED 3
00749 #define QS_LP_ITER_LIMIT 4
00750 #define QS_LP_TIME_LIMIT 5
00751 #define QS_LP_UNSOLVED 6
00752 #define QS_LP_ABORTED 7
00753 #define QS_LP_NUMERR 8
00754 #define QS_LP_OBJ_LIMIT 9
00755 #define QS_LP_MODIFIED 100
00756 #define QS_LP_CHANGE_PREC 1024
00757 #endif
00758
00759
00760
00761
00762
00763 #define DO_NUMER 0
00764
00765
00766 #define DO_SINGULAR 0
00767
00768
00769
00770 #define SIMPLEX_FACTOR 5U
00771 #define DENSE_PI 0
00772 #define DENSE_PIIPI 0
00773 #define DENSE_NORM 0
00774 #define SIMPLEX_DEBUG 0
00775
00776
00777
00778 #define SIMPLEX_CONTINUE 1
00779 #define SIMPLEX_TERMINATE 2
00780 #define SIMPLEX_RESUME 3
00781
00782
00783 #define SIMPLEX_RESUME_SING 1
00784 #define SIMPLEX_RESUME_UNSHIFT 2
00785 #define SIMPLEX_RESUME_NUMER 3
00786
00787
00788 #define SIMPLEX_PHASE_RECOMP 1
00789 #define SIMPLEX_PHASE_NEW 2
00790
00791 #define SIMPLEX_PIVOTINROW 1
00792 #define SIMPLEX_PIVOTINCOL 2
00793 #define SIMPLEX_MAX_RESTART 4
00794 #define SIMPLEX_MAX_PIVOT_FAIL 300
00795
00796
00797 #define FALSE 0
00798 #define TRUE 1
00799 #define QS_FACTOR_MAX_K 1
00800 #define QS_FACTOR_P 2
00801 #define QS_FACTOR_ETAMAX 3
00802 #define QS_FACTOR_FZERO_TOL 4
00803 #define QS_FACTOR_SZERO_TOL 5
00804 #define QS_FACTOR_PARTIAL_TOL 6
00805 #define QS_FACTOR_UR_SPACE_MUL 7
00806 #define QS_FACTOR_UC_SPACE_MUL 8
00807 #define QS_FACTOR_LC_SPACE_MUL 9
00808 #define QS_FACTOR_LR_SPACE_MUL 10
00809 #define QS_FACTOR_ER_SPACE_MUL 11
00810 #define QS_FACTOR_GROW_MUL 12
00811 #define QS_FACTOR_MAXMULT 13
00812 #define QS_FACTOR_MINMULT 14
00813 #define QS_FACTOR_UPDMAXMULT 15
00814 #define QS_FACTOR_DENSE_FRACT 16
00815 #define QS_FACTOR_DENSE_MIN 17
00816 #define E_CHECK_FAILED 6
00817 #define E_NO_PIVOT 7
00818 #define E_FACTOR_BLOWUP 8
00819 #define E_UPDATE_NOSPACE 9
00820 #define E_UPDATE_SINGULAR_ROW 10
00821 #define E_UPDATE_SINGULAR_COL 11
00822 #define E_SING_NO_DATA 12
00823 #define E_SINGULAR_INTERNAL 13
00824 #define SPARSE_FACTOR 0.05
00825 #define CNT_YNZ 1
00826 #define CNT_ZNZ 2
00827 #define CNT_ZANZ 3
00828 #define CNT_PINZ 4
00829 #define CNT_P1PINZ 5
00830 #define CNT_UPNZ 6
00831 #define CNT_PPHASE1ITER 7
00832 #define CNT_PPHASE2ITER 8
00833 #define CNT_DPHASE1ITER 9
00834 #define CNT_DPHASE2ITER 10
00835 #define CNT_PIPIV 11
00836 #define CNT_PIIPIV 12
00837 #define CNT_DIPIV 13
00838 #define CNT_DIIPIV 14
00839 #define CNT_YRAVG 15
00840 #define CNT_ZARAVG 16
00841
00842 #define ROW_PIVOT 0
00843 #define COL_PIVOT 1
00844
00845 #define ILL_LP_OPTIMAL 1
00846 #define ILL_LP_NONOPTIMAL 2
00847 #define ILL_LP_PRIMAL_FEASIBLE 3
00848 #define ILL_LP_PRIMAL_INFEASIBLE 4
00849 #define ILL_LP_PRIMAL_UNBOUNDED 5
00850 #define ILL_LP_DUAL_FEASIBLE 6
00851 #define ILL_LP_DUAL_INFEASIBLE 7
00852 #define ILL_LP_DUAL_UNBOUNDED 8
00853
00854 typedef enum
00855 { ILL_MPS_NAME, ILL_MPS_OBJSENSE, ILL_MPS_OBJNAME,
00856 ILL_MPS_ROWS, ILL_MPS_COLS, ILL_MPS_RHS, ILL_MPS_RANGES,
00857 ILL_MPS_BOUNDS, ILL_MPS_REFROW, ILL_MPS_ENDATA,
00858 ILL_MPS_NONE
00859 }
00860 ILLmps_section;
00861
00862 #define ILL_MPS_N_SECTIONS ILL_MPS_NONE
00863
00864
00865 #define USEHEAP 1
00866
00867
00868 #define PRICE_OPTIMAL 1
00869 #define PRICE_NONOPTIMAL 2
00870
00871
00872 #define ROW_PRICING 1
00873 #define COL_PRICING 2
00874
00875
00876
00877
00878
00879 #define QS_DATA_ERROR 0
00880 #define QS_DATA_WARN 1
00881 #define QS_MPS_FORMAT_ERROR 2
00882 #define QS_MPS_FORMAT_WARN 3
00883 #define QS_LP_FORMAT_ERROR 4
00884 #define QS_LP_FORMAT_WARN 5
00885 #define QS_INPUT_NERROR 8
00886
00887
00888 #define BBOUND 1
00889 #define BATOLOWER 2
00890 #define BATOUPPER 3
00891 #define BBTOLOWER 4
00892 #define BBTOUPPER 5
00893 #define BSKIP 6
00894
00895
00896 #define RATIO_UNBOUNDED 1
00897 #define RATIO_NOBCHANGE 2
00898 #define RATIO_BCHANGE 3
00899 #define RATIO_FAILED 4
00900 #define RATIO_NEGATIVE 5
00901
00902
00903 #define QSE_WLVL 10000
00904
00905
00906
00907
00908
00909
00910 #endif
00911
00912
00913
00914
00915
00916
00917
00918
00919
00920
00921
00922
00923
00924
00925
00926
00927
00928
00929
00930
00931
00932
00933 #ifndef __URANDOM_H__
00934 #define __URANDOM_H__
00935
00936
00937
00938
00939
00940
00941
00942
00943
00944
00945
00946
00947
00948
00949 #define ILL_PRANDMAX 1000000007
00950
00951 typedef struct ILLrandstate
00952 {
00953 int a;
00954 int b;
00955 int arr[55];
00956 }
00957 ILLrandstate;
00958
00959
00960 void ILLutil_sprand (
00961 int seed,
00962 ILLrandstate * r);
00963
00964 int ILLutil_lprand (
00965 ILLrandstate * r);
00966
00967
00968
00969 #endif
00970
00971
00972
00973
00974
00975
00976
00977
00978
00979
00980
00981
00982
00983
00984
00985
00986
00987
00988
00989
00990
00991
00992
00993 #ifndef ILL_SYMTAB_H
00994 #define ILL_SYMTAB_H
00995
00996
00997 #define ILL_namebufsize 0x20000U
00998
00999 typedef struct ILLsymbolent
01000 {
01001 int symbol;
01002 int index;
01003 int next;
01004 }
01005 ILLsymbolent;
01006
01007 typedef struct ILLsymboltab
01008 {
01009 int *hashtable;
01010 ILLsymbolent *nametable;
01011 char *namelist;
01012 int tablesize;
01013 int strsize;
01014 int hashspace;
01015 int name_space;
01016 int strspace;
01017 int freedchars;
01018 int the_hash;
01019 int the_index;
01020 int the_prev_index;
01021 int index_ok;
01022 }
01023 ILLsymboltab;
01024
01025
01026
01027
01028
01029
01030
01031
01032
01033
01034
01035
01036
01037
01038
01039
01040
01041
01042
01043 #define ILL_SYM_NOINDEX (-1)
01044 extern void ILLsymboltab_init (
01045 ILLsymboltab * h),
01046 ILLsymboltab_free (
01047 ILLsymboltab * h),
01048 ILLsymboltab_size (
01049 const ILLsymboltab * h,
01050 int *p_size),
01051 ILLsymboltab_prt (
01052 FILE * fd,
01053 ILLsymboltab * h);
01054
01055 extern int ILLsymboltab_create (
01056 ILLsymboltab * h,
01057 int init_size),
01058 ILLsymboltab_copy (
01059 ILLsymboltab * src,
01060 ILLsymboltab * dst),
01061 ILLsymboltab_register (
01062 ILLsymboltab * h,
01063 const char *s,
01064 int itemindex,
01065 int *p_index,
01066 int *p_existed),
01067 ILLsymboltab_lookup (
01068 ILLsymboltab * h,
01069 const char *s,
01070 int *p_index),
01071 ILLsymboltab_index_ok (
01072 ILLsymboltab * h),
01073 ILLsymboltab_index_reset (
01074 ILLsymboltab * h,
01075 int icount,
01076 char **names),
01077 ILLsymboltab_getindex (
01078 ILLsymboltab * h,
01079 const char *name,
01080 int *hindex),
01081 ILLsymboltab_contains (
01082 ILLsymboltab * h,
01083 const char *s),
01084 ILLsymboltab_delete (
01085 ILLsymboltab * h,
01086 const char *s),
01087 ILLsymboltab_uname (
01088 ILLsymboltab * h,
01089 char name[ILL_namebufsize],
01090 const char *try_prefix1,
01091 const char *try_prefix2);
01092
01093 extern void ILLsymboltab_unique_name (
01094 ILLsymboltab * tab,
01095 int i,
01096 const char *pref,
01097 char uname[ILL_namebufsize]);
01098
01099 extern const char *ILLsymboltab_get (
01100 const ILLsymboltab * tab,
01101 int i);
01102 extern int ILLsymboltab_rename (
01103 ILLsymboltab * h,
01104 int i,
01105 const char *new_name);
01106
01107 #endif
01108
01109
01110
01111
01112
01113
01114
01115
01116
01117
01118
01119
01120
01121
01122
01123
01124
01125
01126
01127
01128
01129
01130
01131 #ifndef REPORTER_FILE
01132 #define REPORTER_FILE
01133
01134 typedef int (
01135 *qsreport_string_fct) (
01136 void *dest,
01137 const char *s);
01138
01139 typedef struct qsstring_reporter
01140 {
01141 qsreport_string_fct report_fct;
01142 void *dest;
01143 }
01144 qsstring_reporter;
01145
01146 extern int ILL_fprintf (
01147 void *dest,
01148 const char *s);
01149
01150 void ILLstring_reporter_init (
01151 qsstring_reporter * reporter,
01152 qsreport_string_fct fct,
01153 void *dest);
01154
01155 void ILLstring_reporter_copy (
01156 qsstring_reporter * dest,
01157 qsstring_reporter * src);
01158
01159 #define ILLstring_report(s, reporter) \
01160 ((reporter)->report_fct((reporter)->dest, s) < 0)
01161
01162
01163
01164 #endif
01165
01166
01167
01168
01169
01170
01171
01172
01173
01174
01175
01176
01177
01178
01179
01180
01181
01182
01183
01184
01185
01186
01187 #ifndef __ALLOCRUS_H__
01188 #define __ALLOCRUS_H__
01189
01190
01191
01192
01193
01194
01195
01196
01197
01198
01199
01200
01201
01202
01203
01204
01205
01206
01207
01208 extern int ILLTRACE_MALLOC;
01209
01210 #ifndef USEDMALLOC
01211 #define ILL_UTIL_SAFE_MALLOC(nnum,type,varname) \
01212 (((ILLTRACE_MALLOC) ? printf("%s.%d: %s: ILL_UTIL_SAFE_MALLOC: %s = %d * %s\n", __FILE__, __LINE__, __DEV_FUNCTION__, #varname, nnum, #type) : 0), \
01213 (type *) ILLutil_allocrus (((size_t) (nnum)) * sizeof (type)))
01214 #else
01215 #define ILL_UTIL_SAFE_MALLOC(nnum,type,varname) \
01216 (((ILLTRACE_MALLOC) ? printf("%s.%d: %s: ILL_UTIL_SAFE_MALLOC: %s = %d * %s\n", __FILE__, __LINE__, __DEV_FUNCTION__, #varname, nnum, #type) : 0), \
01217 (type *) malloc (((size_t) (nnum)) * sizeof (type)))
01218 #endif
01219
01220 #define ILL_IFFREE(object,type) { \
01221 if ((object)) { \
01222 ILLutil_freerus ((void *) (object)); \
01223 object = (type *) NULL; \
01224 }}
01225
01226 #define ILL_PTRWORLD_ALLOC_ROUTINE(type, ptr_alloc_r, ptr_bulkalloc_r) \
01227 \
01228 static int ptr_bulkalloc_r (ILLptrworld *world, int nalloc) \
01229 { \
01230 ILLbigchunkptr *bp; \
01231 int i; \
01232 int count = ILL_BIGCHUNK / sizeof ( type ); \
01233 type *p; \
01234 \
01235 while (nalloc > 0) { \
01236 bp = ILLutil_bigchunkalloc (); \
01237 if (bp == (ILLbigchunkptr *) NULL) { \
01238 fprintf (stderr, "ptr alloc failed\n"); \
01239 return 1; \
01240 } \
01241 bp->next = world->chunklist ; \
01242 world->chunklist = bp; \
01243 \
01244 p = ( type * ) bp->this_one; \
01245 for (i=count-2; i>=0; i--) { \
01246 p[i].next = &p[i+1]; \
01247 } \
01248 p[count - 1].next = (type *) world->freelist; \
01249 world->freelist = (void *) p; \
01250 nalloc -= count; \
01251 } \
01252 return 0; \
01253 } \
01254 \
01255 static type *ptr_alloc_r (ILLptrworld *world) \
01256 { \
01257 type *p; \
01258 \
01259 if (world->freelist == (void *) NULL) { \
01260 if (ptr_bulkalloc_r (world, 1)) { \
01261 fprintf (stderr, "ptr alloc failed\n"); \
01262 return ( type * ) NULL; \
01263 } \
01264 } \
01265 p = (type *) world->freelist ; \
01266 world->freelist = (void *) p->next; \
01267 \
01268 return p; \
01269 }
01270
01271 #define ILL_PTRWORLD_FREE_ROUTINE(type, ptr_free_r) \
01272 \
01273 static void ptr_free_r (ILLptrworld *world, type *p) \
01274 { \
01275 p->next = (type *) world->freelist ; \
01276 world->freelist = (void *) p; \
01277 }
01278
01279 #define ILL_PTRWORLD_LISTADD_ROUTINE(type, entrytype, ptr_listadd_r, ptr_alloc_r) \
01280 \
01281 static int ptr_listadd_r (type **list, entrytype x, ILLptrworld *world) \
01282 { \
01283 if (list != (type **) NULL) { \
01284 type *p = ptr_alloc_r (world); \
01285 \
01286 if (p == (type *) NULL) { \
01287 fprintf (stderr, "ptr list add failed\n"); \
01288 return 1; \
01289 } \
01290 p->this = x; \
01291 p->next = *list; \
01292 *list = p; \
01293 } \
01294 return 0; \
01295 }
01296
01297 #define ILL_PTRWORLD_LISTFREE_ROUTINE(type, ptr_listfree_r, ptr_free_r) \
01298 \
01299 static void ptr_listfree_r (ILLptrworld *world, type *p) \
01300 { \
01301 type *next; \
01302 \
01303 while (p != (type *) NULL) { \
01304 next = p->next; \
01305 ptr_free_r (world, p); \
01306 p = next; \
01307 } \
01308 }
01309
01310 #define ILL_PTRWORLD_LEAKS_ROUTINE(type, ptr_leaks_r, field, fieldtype) \
01311 \
01312 static int ptr_leaks_r (ILLptrworld *world, int *total, int *onlist) \
01313 { \
01314 int count = ILL_BIGCHUNK / sizeof ( type ); \
01315 int duplicates = 0; \
01316 type * p; \
01317 ILLbigchunkptr *bp; \
01318 \
01319 *total = 0; \
01320 *onlist = 0; \
01321 \
01322 for (bp = world->chunklist ; bp; bp = bp->next) \
01323 (*total) += count; \
01324 \
01325 for (p = (type *) world->freelist ; p; p = p->next) { \
01326 (*onlist)++; \
01327 p-> field = ( fieldtype ) 0; \
01328 } \
01329 for (p = (type *) world->freelist ; p; p = p->next) { \
01330 if ((unsigned long) p-> field == (unsigned long) (size_t) 1) \
01331 duplicates++; \
01332 else \
01333 p-> field = ( fieldtype ) (size_t) 1; \
01334 } \
01335 if (duplicates) { \
01336 fprintf (stderr, "WARNING: %d duplicates on ptr free list \n", \
01337 duplicates); \
01338 } \
01339 return *total - *onlist; \
01340 }
01341
01342 #define ILL_PTRWORLD_ROUTINES(type, ptr_alloc_r, ptr_bulkalloc_r, ptr_free_r) \
01343 ILL_PTRWORLD_ALLOC_ROUTINE (type, ptr_alloc_r, ptr_bulkalloc_r) \
01344 ILL_PTRWORLD_FREE_ROUTINE (type, ptr_free_r)
01345
01346 #define ILL_PTRWORLD_LIST_ROUTINES(type, entrytype, ptr_alloc_r, ptr_bulkalloc_r, ptr_free_r, ptr_listadd_r, ptr_listfree_r) \
01347 ILL_PTRWORLD_ROUTINES (type, ptr_alloc_r, ptr_bulkalloc_r, ptr_free_r) \
01348 ILL_PTRWORLD_LISTADD_ROUTINE (type, entrytype, ptr_listadd_r, ptr_alloc_r) \
01349 ILL_PTRWORLD_LISTFREE_ROUTINE (type, ptr_listfree_r, ptr_free_r)
01350
01351 #define ILL_BIGCHUNK ((int) ((1<<16) - sizeof (ILLbigchunkptr) - 16))
01352
01353 struct ILLbigchunk;
01354
01355 typedef struct ILLbigchunkptr
01356 {
01357 void *this_one;
01358 struct ILLbigchunk *this_chunk;
01359 struct ILLbigchunkptr *next;
01360 }
01361 ILLbigchunkptr;
01362
01363
01364 typedef struct ILLptrworld
01365 {
01366 int refcount;
01367 void *freelist;
01368 ILLbigchunkptr *chunklist;
01369 }
01370 ILLptrworld;
01371
01372
01373
01374 void *ILLutil_allocrus (
01375 size_t size),
01376 *ILLutil_reallocrus (
01377 void *ptr,
01378 size_t size),
01379 ILLutil_freerus (
01380 void *p),
01381 ILLutil_bigchunkfree (
01382 ILLbigchunkptr * bp),
01383 ILLptrworld_init (
01384 ILLptrworld * world),
01385 ILLptrworld_add (
01386 ILLptrworld * world),
01387 ILLptrworld_delete (
01388 ILLptrworld * world);
01389
01390 int ILLutil_reallocrus_scale (
01391 void **pptr,
01392 int *pnnum,
01393 int count,
01394 double scale,
01395 size_t size),
01396 ILLutil_reallocrus_count (
01397 void **pptr,
01398 int count,
01399 size_t size);
01400
01401 ILLbigchunkptr *ILLutil_bigchunkalloc (
01402 void);
01403
01404
01405
01406 #endif
01407
01408
01409
01410
01411
01412
01413
01414
01415
01416
01417
01418
01419
01420
01421
01422
01423
01424
01425
01426
01427
01428
01429 #ifndef __BGETOPT_H__
01430 #define __BGETOPT_H__
01431
01432
01433
01434
01435
01436
01437 int ILLutil_bix_getopt (
01438 int argc,
01439 char **argv,
01440 const char *def,
01441 int *p_optind,
01442 char **p_optarg);
01443
01444
01445 #define ILL_BIX_GETOPT_UNKNOWN -3038
01446
01447
01448
01449 #endif
01450
01451
01452
01453
01454
01455
01456
01457
01458
01459
01460
01461
01462
01463
01464
01465
01466
01467
01468
01469
01470
01471
01472 #ifndef __ZEIT_H__
01473 #define __ZEIT_H__
01474
01475
01476
01477
01478
01479
01480 typedef struct ILLutil_timer
01481 {
01482 double szeit;
01483 double cum_zeit;
01484 char name[40];
01485 int count;
01486 }
01487 ILLutil_timer;
01488
01489
01490 double ILLutil_zeit (
01491 void),
01492 ILLutil_real_zeit (
01493 void),
01494 ILLutil_stop_timer (
01495 ILLutil_timer * t,
01496 int printit),
01497 ILLutil_total_timer (
01498 ILLutil_timer * t,
01499 int printit);
01500
01501
01502 void ILLutil_init_timer (
01503 ILLutil_timer * t,
01504 const char *name),
01505 ILLutil_start_timer (
01506 ILLutil_timer * t),
01507 ILLutil_suspend_timer (
01508 ILLutil_timer * t),
01509 ILLutil_resume_timer (
01510 ILLutil_timer * t);
01511
01512
01513
01514 #endif
01515
01516
01517
01518
01519
01520
01521
01522
01523
01524
01525
01526
01527
01528
01529
01530
01531
01532
01533
01534
01535
01536
01537
01538 #ifndef ILL_except
01539 #define ILL_except
01540
01541
01542
01543
01544
01545
01546
01547 # ifdef __GNUC__
01548 # if __GNUC__ > 2 || (__GNUC__ == 2 \
01549 && __GNUC_MINOR__ >= (defined __cplusplus ? 6 : 4))
01550 # define __DEV_FUNCTION__ __PRETTY_FUNCTION__
01551 # else
01552 # define __DEV_FUNCTION__ ((__const char *) 0)
01553 # endif
01554 # else
01555 # if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L
01556 # define __DEV_FUNCTION__ __func__
01557 # else
01558 # define __DEV_FUNCTION__ ((const char *) 0)
01559 # endif
01560 # endif
01561
01562
01563
01564 extern void ILL_report (
01565 const char *msg,
01566 const char *fct,
01567 const char *file,
01568 unsigned int line,
01569 int with_source_info);
01570
01571
01572
01573
01574
01575
01576
01577
01578
01579
01580
01581 #define ILL_GENERAL_ERROR -1
01582 #define ILL_NO_MEMORY 2
01583 #define ILL_NULL_PTR 3
01584
01585 #define ILL_REPORT(msg,with) \
01586 ILL_report(msg, __DEV_FUNCTION__, __FILE__, __LINE__, with)
01587 #ifdef NDEBUG
01588 #define ILL_REPRT(msg) \
01589 ILL_report(msg, __DEV_FUNCTION__, __FILE__, __LINE__, 0)
01590 #else
01591 #define ILL_REPRT(msg) \
01592 ILL_report(msg, __DEV_FUNCTION__, __FILE__, __LINE__, 1)
01593 #endif
01594
01595 #define ILL_RESULT(expr, msg) \
01596 { \
01597 if (TRACE > 0) { ILL_RETURN(expr, msg); } \
01598 return expr; \
01599 }
01600
01601 #define ILL_RETURN_PTR(ptr, msg) \
01602 { void *ILL_RETURN_p = ptr; \
01603 if (ILL_RETURN_p == NULL) { \
01604 if (TRACE > 0) ILL_REPRT(msg); \
01605 } \
01606 return ILL_RETURN_p; \
01607 }
01608
01609 #ifdef NDEBUG
01610 #define ILL_RETURN(expr, msg) \
01611 { \
01612 if (expr != 0) { \
01613 if (TRACE > 0) ILL_REPRT(msg); \
01614 } \
01615 return expr; \
01616 }
01617
01618 #else
01619 #define ILL_RETURN(expr, msg) \
01620 { \
01621 if (expr != 0) { \
01622 ILL_REPRT(msg); \
01623 } \
01624 ILL_IFTRACE("%s: returning %d\n", __DEV_FUNCTION__, expr); \
01625 return expr; \
01626 }
01627 #endif
01628
01629 #define ILL_CHECKnull(expr, msg) \
01630 { if ((expr) == NULL) { \
01631 ILL_REPRT(msg); \
01632 rval = ILL_NULL_PTR; \
01633 goto CLEANUP; \
01634 } }
01635
01636 #define ILL_FAILtrue(expr, msg) \
01637 { if (expr) { \
01638 ILL_REPRT(msg); \
01639 rval = ILL_GENERAL_ERROR; \
01640 goto CLEANUP; \
01641 } }
01642
01643 #define ILL_FAILtrue_no_rval(expr, msg) \
01644 { if (expr) { \
01645 ILL_REPRT(msg); \
01646 goto CLEANUP; \
01647 } }
01648
01649
01650 #define ILL_FAILfalse(expr, msg) ILL_FAILtrue(!(expr), msg)
01651 #define ILL_FAILfalse_no_rval(expr, msg) ILL_FAILtrue_no_rval(!(expr), msg)
01652
01653 #define ILL_ERROR(rval, msg) { \
01654 fprintf(stderr, "%s\n", msg); \
01655 rval = 1; goto CLEANUP; \
01656 }
01657 #define ILL_CLEANUP_IF(rval) { if ((rval) != 0) { goto CLEANUP; } }
01658 #define ILL_CLEANUP goto CLEANUP
01659
01660 #define ILL_SAFE_MALLOC(lhs, n, type) \
01661 { lhs = ILL_UTIL_SAFE_MALLOC(n, type, lhs); \
01662 if (lhs == NULL) { \
01663 ILL_REPRT("Out of memory"); \
01664 rval = ILL_NO_MEMORY; \
01665 goto CLEANUP; \
01666 }}
01667
01668 #define ILL_SAFE_MALLOC_no_rval(lhs, n, type) \
01669 { lhs = ILL_UTIL_SAFE_MALLOC(n, type, lhs); \
01670 if (lhs == NULL) { \
01671 ILL_REPRT("Out of memory"); \
01672 goto CLEANUP; \
01673 }}
01674
01675
01676 #define ILL_NEW(ptr, type) ILL_SAFE_MALLOC(ptr, 1, type)
01677 #define ILL_NEW_no_rval(ptr, type) ILL_SAFE_MALLOC_no_rval(ptr, 1, type)
01678
01679
01680 extern int __QS_SB_VERB;
01681 #endif
01682
01683
01684
01685
01686
01687
01688
01689
01690
01691
01692
01693
01694
01695
01696
01697
01698
01699
01700
01701
01702
01703
01704
01705
01706
01707
01708
01709
01710
01711
01712
01713
01714
01715
01716
01717
01718
01719
01720 #ifndef __QS_CONFIG_H__
01721 #define __QS_CONFIG_H__
01722 #ifdef HAVE_STDIO_H
01723 # include <stdio.h>
01724 #endif
01725 #ifdef HAVE_SYS_SOCKET_H
01726 # include <sys/socket.h>
01727 #endif
01728 #ifdef HAVE_SYS_TYPES_H
01729 # include <sys/types.h>
01730 #endif
01731 #ifdef HAVE_SYS_STAT_H
01732 # include <sys/stat.h>
01733 #endif
01734 #ifdef STDC_HEADERS
01735 # include <stdlib.h>
01736 # include <stddef.h>
01737 #else
01738 # ifdef HAVE_STDLIB_H
01739 # include <stdlib.h>
01740 # endif
01741 #endif
01742 #ifdef HAVE_STRING_H
01743 # if !defined STDC_HEADERS && defined HAVE_MEMORY_H
01744 # include <memory.h>
01745 # endif
01746 # include <string.h>
01747 #endif
01748 #ifdef HAVE_STRINGS_H
01749 # include <strings.h>
01750 #endif
01751 #ifdef HAVE_INTTYPES_H
01752 # include <inttypes.h>
01753 #endif
01754 #ifdef HAVE_STDINT_H
01755 # include <stdint.h>
01756 #endif
01757 #ifdef HAVE_UNISTD_H
01758 # include <unistd.h>
01759 #endif
01760 #ifdef HAVE_ERRNO_H
01761 # include <errno.h>
01762 #endif
01763 #ifdef HAVE_LIMITS_H
01764 # include <limits.h>
01765 #endif
01766 #ifdef HAVE_MATH_H
01767 # include <math.h>
01768 #endif
01769 #ifdef HAVE_FLOAT_H
01770 # include <float.h>
01771 #endif
01772 #ifdef HAVE_GETOPT_H
01773 # include <getopt.h>
01774 #endif
01775 #ifdef HAVE_NETINET_IN_H
01776 # include <netinet/in.h>
01777 #endif
01778 #ifdef HAVE_NETINET_TCP_H
01779 # include <netinet/tcp.h>
01780 #endif
01781 #ifdef HAVE_NETDB_H
01782 # include <netdb.h>
01783 #endif
01784 #ifdef HAVE_FCNTL_H
01785 # include <fcntl.h>
01786 #endif
01787 #ifdef HAVE_SYS_RESOURCE_H
01788 # include <sys/resource.h>
01789 #endif
01790 #ifdef HAVE_SYS_PARAM_H
01791 # include <sys/param.h>
01792 #endif
01793 #ifdef TIME_WITH_SYS_TIME
01794 # include <sys/time.h>
01795 # include <time.h>
01796 #else
01797 # ifdef HAVE_SYS_TIME_H
01798 # include <sys/time.h>
01799 # else
01800 # include <time.h>
01801 # endif
01802 #endif
01803 #ifdef HAVE_SYS_TIMES_H
01804 # include <sys/times.h>
01805 #endif
01806 #ifdef HAVE_STDARG_H
01807 # include <stdarg.h>
01808 #endif
01809 #ifdef HAVE_SYS_UTSNAME_H
01810 # include <sys/utsname.h>
01811 #endif
01812 #ifdef HAVE_SIGNAL_H
01813 # include <signal.h>
01814 #endif
01815 #ifdef HAVE_SETJMP_H
01816 # include <setjmp.h>
01817 #endif
01818
01819
01820
01821 #ifdef HAVE_LIBGMP
01822 # if HAVE_LIBGMP
01823 # ifdef HAVE_GMP_H
01824 # include <gmp.h>
01825 # else
01826 # error Must have gmp.h for compiling QSopt_ex
01827 # endif
01828 # else
01829 # error Must have gmp.h for compiling QSopt_ex
01830 # endif
01831 # else
01832 # error Must have gmp.h for compiling QSopt_ex
01833 #endif
01834
01835
01836 #ifndef DEBUG
01837 #warning you should define DEBUG, assuming it to be 1
01838 #define DEBUG 1
01839 #endif
01840
01841
01842
01843 #ifndef VERBOSE_LEVEL
01844 #warning you should define VERBOSE_LEVEL, assuming it to be 1
01845 #define VERBOSE_LEVEL 1
01846 #endif
01847
01848 #ifdef HAVE_EGLIB_H
01849 # if HAVE_EGLIB_H
01850 # include "EGlib.h"
01851 # else
01852 # error You must have EGlib.h for compilation
01853 # endif
01854 #else
01855 # error You must have EGlib.h for compilation
01856 #endif
01857
01858
01859 void QSopt_ex_version(void);
01860 #endif
01861
01862
01863
01864
01865
01866
01867
01868
01869
01870
01871
01872
01873
01874
01875
01876
01877
01878
01879
01880
01881
01882
01883
01884 #ifndef dbl___QS_QSTRUCT_H
01885 #define dbl___QS_QSTRUCT_H
01886
01887 typedef struct dbl_qsdata
01888 {
01889 struct dbl_ILLlpdata *qslp;
01890 struct dbl_lpinfo *lp;
01891 struct dbl_price_info *pricing;
01892 struct dbl_ILLlp_basis *basis;
01893 struct dbl_ILLlp_cache *cache;
01894 char *name;
01895 int qstatus;
01896 int factorok;
01897 int simplex_display;
01898 int simplex_scaling;
01899 itcnt_t itcnt;
01900 double uobjlim;
01901 double lobjlim;
01902 }
01903 dbl_QSdata;
01904
01905 #endif
01906
01907
01908
01909
01910
01911
01912
01913
01914
01915
01916
01917
01918
01919
01920
01921
01922
01923
01924
01925
01926
01927
01928
01929 #ifndef dbl_EDITOR_H
01930 #define dbl_EDITOR_H
01931
01932 extern void dbl_ILLeditor_init (
01933 void);
01934 extern void dbl_ILLeditor (
01935 dbl_QSdata * p);
01936 extern int dbl_ILLeditor_solve (
01937 dbl_QSdata * p,
01938 int salgo);
01939
01940 #endif
01941
01942
01943
01944
01945
01946
01947
01948
01949
01950
01951
01952
01953
01954
01955
01956
01957
01958
01959
01960
01961
01962
01963
01964
01965
01966
01967
01968
01969
01970 #ifndef dbl___SVECTOR_H
01971 #define dbl___SVECTOR_H
01972
01973 typedef struct dbl_svector
01974 {
01975 int nzcnt;
01976 int *indx;
01977 int size;
01978 double *coef;
01979 }
01980 dbl_svector;
01981
01982 void dbl_ILLsvector_init (
01983 dbl_svector * s),
01984 dbl_ILLsvector_free (
01985 dbl_svector * s);
01986
01987 int dbl_ILLsvector_alloc (
01988 dbl_svector * s,
01989 int nzcnt),
01990 dbl_ILLsvector_copy (
01991 const dbl_svector * s_in,
01992 dbl_svector * s_out);
01993
01994 #endif
01995
01996
01997
01998
01999
02000
02001
02002 #ifndef dbl___HEAP_H
02003 #define dbl___HEAP_H
02004
02005 typedef struct
02006 {
02007 int *entry;
02008 int *loc;
02009 double *key;
02010 int hexist;
02011 int maxsize;
02012 int size;
02013 }
02014 dbl_heap;
02015
02016 void dbl_ILLheap_insert (
02017 dbl_heap * const h,
02018 int const ix),
02019 dbl_ILLheap_modify (
02020 dbl_heap * const h,
02021 int const ix),
02022 dbl_ILLheap_delete (
02023 dbl_heap * const h,
02024 int const ix),
02025 dbl_ILLheap_init (
02026 dbl_heap * const h),
02027 dbl_ILLheap_free (
02028 dbl_heap * const h);
02029
02030 int dbl_ILLheap_findmin (
02031 dbl_heap * const h),
02032 dbl_ILLheap_build (
02033 dbl_heap * const h,
02034 int const nelems,
02035 double * key);
02036
02037 #endif
02038
02039
02040
02041
02042
02043
02044
02045 #ifndef dbl___MATRIX_H
02046 #define dbl___MATRIX_H
02047
02048 typedef struct dbl_ILLmatrix
02049 {
02050 double *matval;
02051 int *matcnt;
02052 int *matind;
02053 int *matbeg;
02054 int matcols;
02055 int matrows;
02056 int matcolsize;
02057 int matsize;
02058 int matfree;
02059
02060
02061 }
02062 dbl_ILLmatrix;
02063
02064 void dbl_ILLmatrix_init (
02065 dbl_ILLmatrix * A);
02066 void dbl_ILLmatrix_free (
02067 dbl_ILLmatrix * A);
02068 void dbl_ILLmatrix_prt (
02069 EGioFile_t * fd,
02070 dbl_ILLmatrix * A);
02071
02072 #endif
02073
02074
02075
02076
02077
02078
02079
02080
02081
02082
02083
02084
02085
02086
02087
02088
02089
02090
02091
02092
02093
02094
02095
02096 #ifndef dbl___QS_FACTOR_H_
02097 #define dbl___QS_FACTOR_H_
02098
02099 typedef char dbl_QSbool;
02100
02101 typedef struct dbl_uc_info
02102 {
02103 int cbeg;
02104 int nzcnt;
02105 int next;
02106 int prev;
02107 int delay;
02108 }
02109 dbl_uc_info;
02110
02111 typedef struct dbl_ur_info
02112 {
02113 double max;
02114 int rbeg;
02115 int nzcnt;
02116 int pivcnt;
02117 int next;
02118 int prev;
02119 int delay;
02120 }
02121 dbl_ur_info;
02122
02123 typedef struct dbl_lc_info
02124 {
02125 int cbeg;
02126 int nzcnt;
02127 int c;
02128 int crank;
02129 int delay;
02130 }
02131 dbl_lc_info;
02132
02133 typedef struct dbl_lr_info
02134 {
02135 int rbeg;
02136 int nzcnt;
02137 int r;
02138 int rrank;
02139 int delay;
02140 }
02141 dbl_lr_info;
02142
02143 typedef struct dbl_er_info
02144 {
02145 int rbeg;
02146 int nzcnt;
02147 int r;
02148 }
02149 dbl_er_info;
02150
02151 typedef struct dbl_factor_work
02152 {
02153 int max_k;
02154 double fzero_tol;
02155 double szero_tol;
02156 double partial_tol;
02157 double ur_space_mul;
02158 double uc_space_mul;
02159 double lc_space_mul;
02160 double lr_space_mul;
02161 double er_space_mul;
02162 double grow_mul;
02163 int p;
02164 int etamax;
02165 double minmult;
02166 double maxmult;
02167 double updmaxmult;
02168 double dense_fract;
02169 int dense_min;
02170
02171 double maxelem_orig;
02172 int nzcnt_orig;
02173 double maxelem_factor;
02174 int nzcnt_factor;
02175 double maxelem_cur;
02176 int nzcnt_cur;
02177
02178 double partial_cur;
02179
02180 int dim;
02181 int stage;
02182 int nstages;
02183 int etacnt;
02184 double *work_coef;
02185 int *work_indx;
02186 dbl_uc_info *uc_inf;
02187 dbl_ur_info *ur_inf;
02188 dbl_lc_info *lc_inf;
02189 dbl_lr_info *lr_inf;
02190 dbl_er_info *er_inf;
02191 int *ucindx;
02192 int *ucrind;
02193 double *uccoef;
02194 int *urindx;
02195 int *urcind;
02196 double *urcoef;
02197 int *lcindx;
02198 double *lccoef;
02199 int *lrindx;
02200 double *lrcoef;
02201 int *erindx;
02202 double *ercoef;
02203 int *rperm;
02204 int *rrank;
02205 int *cperm;
02206 int *crank;
02207 dbl_svector xtmp;
02208 int ur_freebeg;
02209 int ur_space;
02210 int uc_freebeg;
02211 int uc_space;
02212 int lc_freebeg;
02213 int lc_space;
02214 int lr_freebeg;
02215 int lr_space;
02216 int er_freebeg;
02217 int er_space;
02218
02219 int *p_nsing;
02220 int **p_singr;
02221 int **p_singc;
02222
02223 double *dmat;
02224 int drows;
02225 int dcols;
02226 int dense_base;
02227 }
02228 dbl_factor_work;
02229
02230 void dbl_ILLfactor_init_factor_work (
02231 dbl_factor_work * f),
02232 dbl_ILLfactor_free_factor_work (
02233 dbl_factor_work * f),
02234 dbl_ILLfactor_ftran (
02235 dbl_factor_work * f,
02236 dbl_svector * a,
02237 dbl_svector * x),
02238 dbl_ILLfactor_ftran_update (
02239 dbl_factor_work * f,
02240 dbl_svector * a,
02241 dbl_svector * upd,
02242 dbl_svector * x),
02243 dbl_ILLfactor_btran (
02244 dbl_factor_work * f,
02245 dbl_svector * a,
02246 dbl_svector * x);
02247
02248 int dbl_ILLfactor_create_factor_work (
02249 dbl_factor_work * f,
02250 int dim),
02251 dbl_ILLfactor_set_factor_iparam (
02252 dbl_factor_work * f,
02253 int param,
02254 int val),
02255 dbl_ILLfactor_set_factor_dparam (
02256 dbl_factor_work * f,
02257 int param,
02258 double val),
02259 dbl_ILLfactor (
02260 dbl_factor_work * f,
02261 int *basis,
02262 int *cbeg,
02263 int *clen,
02264 int *cindx,
02265 double * ccoef,
02266 int *p_nsing,
02267 int **p_singr,
02268 int **p_singc),
02269 dbl_ILLfactor_update (
02270 dbl_factor_work * f,
02271 dbl_svector * a,
02272 int col,
02273 int *p_refact);
02274
02275 #endif
02276
02277
02278
02279
02280
02281
02282
02283
02284
02285
02286
02287
02288
02289
02290
02291
02292
02293
02294
02295
02296
02297
02298
02299 #ifndef dbl___QS_LPDEFS_H
02300 #define dbl___QS_LPDEFS_H
02301
02302
02303
02304 #define dbl_INFTY dbl_ILL_MAXDOUBLE
02305 #define dbl_NINFTY dbl_ILL_MINDOUBLE
02306
02307
02308
02309
02310 extern double dbl_PARAM_IBASIS_RPIVOT;
02311 extern double dbl_PARAM_IBASIS_RTRIANG;
02312 extern double dbl_PARAM_MIN_DNORM;
02313 extern double dbl_PFEAS_TOLER;
02314 extern double dbl_BD_TOLER;
02315 extern double dbl_DFEAS_TOLER;
02316 extern double dbl_PIVOT_TOLER;
02317 extern double dbl_SZERO_TOLER;
02318 extern double dbl_PIVZ_TOLER;
02319 extern double dbl_OBJBND_TOLER;
02320 extern double dbl_DBNDPIV_TOLER;
02321 extern double dbl_DBNDPIV_RATIO;
02322 extern double dbl_ALTPIV_TOLER;
02323
02324 extern double dbl_PROGRESS_ZERO;
02325 extern double dbl_PROGRESS_THRESH;
02326 extern double dbl_CB_EPS;
02327 extern double dbl_CB_INF_RATIO;
02328 extern double dbl_CB_PRI_RLIMIT;
02329
02330
02331 typedef struct
02332 {
02333 int ynz_cnt;
02334 int num_y;
02335 double y_ravg;
02336 int znz_cnt;
02337 int num_z;
02338 double z_ravg;
02339 int zanz_cnt;
02340 int num_za;
02341 double za_ravg;
02342 int pnorm_cnt;
02343 int dnorm_cnt;
02344 int pinz_cnt;
02345 int num_pi;
02346 int pi1nz_cnt;
02347 int num_pi1;
02348 int upnz_cnt;
02349 int num_up;
02350 int pupv_cnt;
02351 int dupv_cnt;
02352
02353 int start_slacks;
02354 int final_slacks;
02355 int start_art;
02356 int final_art;
02357
02358 int pI_iter;
02359 int pII_iter;
02360 int dI_iter;
02361 int dII_iter;
02362 int tot_iter;
02363
02364 int pivpI[10];
02365 int pivpII[10];
02366 int pivdI[10];
02367 int pivdII[10];
02368 }
02369 dbl_count_struct;
02370
02371
02372 typedef struct
02373 {
02374 double pfeas_tol;
02375 double dfeas_tol;
02376 double pivot_tol;
02377 double szero_tol;
02378 double ip_tol;
02379 double id_tol;
02380 }
02381 dbl_tol_struct;
02382
02383
02384 typedef struct dbl_bndinfo
02385 {
02386 double pbound;
02387 double cbound;
02388 int btype;
02389 int varnum;
02390 struct dbl_bndinfo *next;
02391 }
02392 dbl_bndinfo;
02393
02394
02395 typedef struct dbl_coefinfo
02396 {
02397 double pcoef;
02398 double ccoef;
02399 int varnum;
02400 struct dbl_coefinfo *next;
02401 }
02402 dbl_coefinfo;
02403
02404
02405 typedef struct dbl_feas_info
02406 {
02407 int pstatus;
02408 int dstatus;
02409 double totinfeas;
02410 }
02411 dbl_feas_info;
02412
02413 typedef struct dbl_lp_status_info
02414 {
02415 char optimal;
02416 char primal_feasible;
02417 char primal_infeasible;
02418 char primal_unbounded;
02419 char dual_feasible;
02420 char dual_infeasible;
02421 char dual_unbounded;
02422 char padd;
02423 }
02424 dbl_lp_status_info;
02425
02426 typedef struct dbl_pI_uinfo
02427 {
02428 int tctr;
02429 int i;
02430 int *perm;
02431 int *ix;
02432 int fs;
02433 double piv;
02434 double *t;
02435 double dty;
02436 double c_obj;
02437 double tz;
02438 }
02439 dbl_pI_uinfo;
02440
02441 extern void dbl_ILLlp_status_info_init (
02442 dbl_lp_status_info * ls);
02443
02444
02445
02446
02447
02448
02449 typedef struct dbl_lpinfo
02450 {
02451
02452 double objval;
02453 double pobjval;
02454 double dobjval;
02455 double pinfeas;
02456 double dinfeas;
02457 double objbound;
02458 dbl_lp_status_info probstat;
02459 dbl_lp_status_info basisstat;
02460 int nrows;
02461 int ncols;
02462 int *matcnt;
02463 int *matbeg;
02464 int *matind;
02465 double *matval;
02466 int matfree;
02467 int matsize;
02468 double *bz;
02469 double *lz;
02470 double *uz;
02471 double *cz;
02472 int localrows;
02473 int *rowcnt;
02474 int *rowbeg;
02475 int *rowind;
02476 double *rowval;
02477
02478 double *xbz;
02479 double *piz;
02480 double *dz;
02481 double *pIxbz;
02482 double *pIpiz;
02483 double *pIdz;
02484
02485 int final_phase;
02486 int infub_ix;
02487
02488 int basisid;
02489 int nnbasic;
02490 int *baz;
02491 int *nbaz;
02492 int *vstat;
02493 int *vindex;
02494 int fbasisid;
02495 dbl_factor_work *f;
02496 int *vtype;
02497 char *vclass;
02498
02499 dbl_svector zz;
02500 dbl_svector yjz;
02501 dbl_svector zA;
02502 dbl_svector work;
02503 dbl_svector srhs;
02504 dbl_svector ssoln;
02505 int *iwork;
02506 dbl_pI_uinfo upd;
02507 int *bfeas;
02508 int *dfeas;
02509
02510 dbl_tol_struct *tol;
02511 dbl_count_struct *cnts;
02512 int nbchange;
02513 int ncchange;
02514 dbl_bndinfo *bchanges;
02515 dbl_coefinfo *cchanges;
02516 int pIratio;
02517 int pIIratio;
02518 int dIratio;
02519 int dIIratio;
02520
02521 int maxiter;
02522 int iterskip;
02523 double maxtime;
02524 double starttime;
02525 struct dbl_ILLlpdata *O;
02526 ILLrandstate rstate;
02527
02528 }
02529 dbl_lpinfo;
02530
02531
02532 typedef struct
02533 {
02534 int ninit;
02535 double *norms;
02536 int *refframe;
02537 }
02538 dbl_p_devex_info;
02539
02540 typedef struct
02541 {
02542 double *norms;
02543 }
02544 dbl_p_steep_info;
02545
02546 typedef struct
02547 {
02548 int k;
02549 int cgroup;
02550 int ngroups;
02551 int *gstart;
02552 int *gshift;
02553 int *gsize;
02554 int bsize;
02555 int *bucket;
02556 int *perm;
02557 double *infeas;
02558 }
02559 dbl_mpart_info;
02560
02561 typedef struct
02562 {
02563 int ninit;
02564 double *norms;
02565 int *refframe;
02566 }
02567 dbl_d_devex_info;
02568
02569 typedef struct
02570 {
02571 double *norms;
02572 }
02573 dbl_d_steep_info;
02574
02575
02576 typedef struct dbl_price_info
02577 {
02578 int p_strategy;
02579 int d_strategy;
02580 int pI_price;
02581 int pII_price;
02582 int dI_price;
02583 int dII_price;
02584 int cur_price;
02585 double *p_scaleinf;
02586 double *d_scaleinf;
02587 dbl_p_devex_info pdinfo;
02588 dbl_p_steep_info psinfo;
02589 dbl_mpart_info pmpinfo;
02590 dbl_d_devex_info ddinfo;
02591 dbl_d_steep_info dsinfo;
02592 dbl_mpart_info dmpinfo;
02593 dbl_heap h;
02594 double htrigger;
02595 int hineff;
02596 char init;
02597 }
02598 dbl_price_info;
02599
02600 #endif
02601
02602
02603
02604
02605
02606
02607
02608
02609
02610
02611
02612
02613
02614
02615
02616
02617
02618
02619
02620
02621
02622
02623
02624 #ifndef dbl_LINE_READER_FILE_H
02625 #define dbl_LINE_READER_FILE_H
02626
02627
02628
02629 typedef char *(
02630 *dbl_qsread_line_fct) (
02631 char *s,
02632 int size,
02633 void *src);
02634
02635 typedef struct dbl_qsline_reader
02636 {
02637 dbl_qsread_line_fct read_line_fct;
02638 void *data_src;
02639 struct dbl_qserror_collector *error_collector;
02640 }
02641 dbl_qsline_reader;
02642
02643 dbl_qsline_reader *dbl_ILLline_reader_new (
02644 dbl_qsread_line_fct fct,
02645 void *data_src);
02646 void dbl_ILLline_reader_free (
02647 dbl_qsline_reader * reader);
02648
02649 #define dbl_ILLline_reader_get(s, size, reader) \
02650 (reader)->read_line_fct(s, size, (reader)->data_src)
02651
02652
02653
02654
02655
02656
02657
02658
02659
02660
02661
02662 #endif
02663
02664
02665
02666
02667
02668
02669
02670
02671
02672
02673
02674
02675
02676
02677
02678
02679
02680
02681
02682
02683
02684
02685
02686 #ifndef dbl_ILL_LPDATA_H
02687 #define dbl_ILL_LPDATA_H
02688
02689
02690 extern double dbl_ILL_MAXDOUBLE;
02691 extern double dbl_ILL_MINDOUBLE;
02692
02693 #define dbl_ILL_MAXINT (2147483647)
02694 #define dbl_ILL_MIN (1)
02695 #define dbl_ILL_MAX (-1)
02696
02697
02698
02699 #define dbl_ILL_PRE_SCALE 1
02700 #define dbl_ILL_PRE_FIXED 2
02701 #define dbl_ILL_PRE_SINGLE_ROW 4
02702 #define dbl_ILL_PRE_FORCING 8
02703 #define dbl_ILL_PRE_SINGLE_COL 16
02704 #define dbl_ILL_PRE_DUPLICATE_ROW 32
02705 #define dbl_ILL_PRE_DUPLICATE_COL 64
02706 #define dbl_ILL_PRE_EMPTY_COL 128
02707 #define dbl_ILL_PRE_ALL (dbl_ILL_PRE_SCALE | dbl_ILL_PRE_FIXED | dbl_ILL_PRE_SINGLE_ROW \
02708 dbl_ILL_PRE_FORCING | dbl_ILL_PRE_SINGLE_COL | dbl_ILL_PRE_DUPLICATE_ROW \
02709 dbl_ILL_PRE_DUPLICATE_COL | dbl_ILL_PRE_EMPTY_COL)
02710 #define dbl_ILL_PRE_SIMPLE (dbl_ILL_PRE_FIXED | dbl_ILL_PRE_EMPTY_COL)
02711
02712 typedef struct dbl_ILLlpdata
02713 {
02714 int nrows;
02715 int ncols;
02716 int nstruct;
02717 int nzcount;
02718 int rowsize;
02719 int colsize;
02720 int structsize;
02721
02722 int objsense;
02723 char *sense;
02724 double *obj;
02725 double *rhs;
02726 double *rangeval;
02727 double *lower;
02728 double *upper;
02729 dbl_ILLmatrix A;
02730 struct dbl_ILLlp_rows *rA;
02731
02732 char **rownames;
02733 ILLsymboltab rowtab;
02734 char *objname;
02735
02736
02737 char **colnames;
02738 ILLsymboltab coltab;
02739
02740 char *probname;
02741 char *intmarker;
02742 int *structmap;
02743 int *rowmap;
02744 struct dbl_ILLlp_basis *basis;
02745 struct dbl_ILLlp_predata *presolve;
02746 struct dbl_ILLlp_sinfo *sinfo;
02747
02748
02749
02750
02751 dbl_ILLmatrix sos;
02752
02753
02754
02755 char *sos_type;
02756 int *is_sos_mem;
02757
02758
02759
02760 char *refrowname;
02761 int refind;
02762
02763
02764
02765
02766
02767
02768
02769
02770 qsstring_reporter reporter;
02771
02772 }
02773 dbl_ILLlpdata;
02774
02775 typedef struct dbl_ILLlp_basis
02776 {
02777 int nstruct;
02778 int nrows;
02779 int rownorms_size;
02780 int colnorms_size;
02781 char *cstat;
02782 char *rstat;
02783 double *rownorms;
02784 double *colnorms;
02785 }
02786 dbl_ILLlp_basis;
02787
02788 typedef struct dbl_ILLlp_cache
02789 {
02790 int nstruct;
02791 int nrows;
02792 int status;
02793 double val;
02794 double *x;
02795 double *pi;
02796 double *rc;
02797 double *slack;
02798 }
02799 dbl_ILLlp_cache;
02800
02801 typedef struct dbl_ILLlp_sinfo
02802 {
02803 int ncols;
02804 int nrows;
02805 int nzcount;
02806 int rowsize;
02807 int colsize;
02808 int objsense;
02809
02810 double *obj;
02811 double *rhs;
02812 double *lower;
02813 double *upper;
02814
02815 dbl_ILLmatrix A;
02816
02817 char **colnames;
02818 }
02819 dbl_ILLlp_sinfo;
02820
02821 typedef struct dbl_ILLlp_preline
02822 {
02823 double rhs;
02824 double obj;
02825 double lower;
02826 double upper;
02827 int count;
02828 int *ind;
02829 int row_or_col;
02830 double *val;
02831 }
02832 dbl_ILLlp_preline;
02833
02834 typedef struct dbl_ILLlp_preop
02835 {
02836 int ptype;
02837 int rowindex;
02838 int colindex;
02839 dbl_ILLlp_preline line;
02840 }
02841 dbl_ILLlp_preop;
02842
02843 typedef struct dbl_ILLlp_predata
02844 {
02845 int opcount;
02846 int opsize;
02847 dbl_ILLlp_preop *oplist;
02848 int r_nrows;
02849 int r_ncols;
02850 int *colmap;
02851 int *rowmap;
02852 double *rowscale;
02853 double *colscale;
02854 double *colfixval;
02855 double *rowfixval;
02856 }
02857 dbl_ILLlp_predata;
02858
02859 typedef struct dbl_ILLlp_rows
02860 {
02861 int *rowbeg;
02862 int *rowcnt;
02863 int *rowind;
02864 double *rowval;
02865 }
02866 dbl_ILLlp_rows;
02867
02868
02869
02870
02871
02872
02873
02874
02875 struct dbl_qsdata *dbl_ILLread (
02876 dbl_qsline_reader * file,
02877 const char *dbl_fname,
02878 int isMps);
02879 void dbl_ILLstart (
02880 void);
02881
02882
02883
02884 void dbl_ILLend (
02885 void);
02886
02887
02888 void dbl_ILLchange_precision (
02889 void);
02890
02891
02892
02893
02894 void dbl_ILLlpdata_init (
02895 dbl_ILLlpdata * lp);
02896 void dbl_ILLlpdata_free (
02897 dbl_ILLlpdata * lp);
02898 void dbl_ILLlp_basis_init (
02899 dbl_ILLlp_basis * B);
02900 void dbl_ILLlp_basis_free (
02901 dbl_ILLlp_basis * B);
02902 void dbl_ILLlp_cache_init (
02903 dbl_ILLlp_cache * C);
02904 void dbl_ILLlp_cache_free (
02905 dbl_ILLlp_cache * C);
02906 int dbl_ILLlp_basis_alloc (
02907 dbl_ILLlp_basis * B,
02908 int ncols,
02909 int nrows);
02910 int dbl_ILLlp_cache_alloc (
02911 dbl_ILLlp_cache * C,
02912 int ncols,
02913 int nrows);
02914
02915 int dbl_ILLlp_rows_init (
02916 dbl_ILLlp_rows * lp_rows,
02917 dbl_ILLlpdata * lp,
02918 int include_logicals);
02919 void dbl_ILLlp_rows_clear (
02920 dbl_ILLlp_rows * lp_rows);
02921 int dbl_ILLprint_report (
02922 dbl_ILLlpdata * lp,
02923 const char *format,
02924 ...);
02925
02926
02927
02928
02929
02930
02931
02932
02933
02934 void dbl_ILLlp_sinfo_init (
02935 dbl_ILLlp_sinfo * sinfo),
02936 dbl_ILLlp_sinfo_free (
02937 dbl_ILLlp_sinfo * sinfo),
02938 dbl_ILLlp_predata_init (
02939 dbl_ILLlp_predata * pre),
02940 dbl_ILLlp_predata_free (
02941 dbl_ILLlp_predata * pre);
02942
02943 int dbl_ILLlp_add_logicals (
02944 dbl_ILLlpdata * lp),
02945 dbl_ILLlp_scale (
02946 dbl_ILLlpdata * lp),
02947 dbl_ILLlp_presolve (
02948 dbl_ILLlpdata * lp,
02949 int pre_types);
02950
02951
02952
02953
02954
02955 extern int dbl___QSEX_SETUP;
02956
02957 #endif
02958
02959
02960
02961
02962
02963
02964
02965
02966
02967
02968
02969
02970
02971
02972
02973
02974
02975
02976
02977
02978
02979
02980
02981 #ifndef dbl___BASIS_H
02982 #define dbl___BASIS_H
02983
02984
02985 #if 0
02986 #if EGLPNUM_TYPE != DBL_TYPE && EGLPNUM_TYPE != LDBL_TYPE
02987 extern double dbl_CB_PRI_RLIMIT;
02988 extern double dbl_CB_INF_RATIO;
02989 extern double dbl_CB_EPS;
02990 #endif
02991 #endif
02992
02993 typedef struct dbl_var_data
02994 {
02995 int nartif;
02996 int nslacks;
02997 int nfree;
02998 int nbndone;
02999 int nbounded;
03000 int nfixed;
03001 double cmax;
03002 }
03003 dbl_var_data;
03004
03005 void dbl_ILLbasis_init_vardata (
03006 dbl_var_data * vd);
03007 void dbl_ILLbasis_clear_vardata (
03008 dbl_var_data * vd);
03009
03010 int dbl_ILLbasis_build_basisinfo (
03011 dbl_lpinfo * lp),
03012 dbl_ILLbasis_get_initial (
03013 dbl_lpinfo * lp,
03014 int algorithm),
03015 dbl_ILLbasis_get_cinitial (
03016 dbl_lpinfo * lp,
03017 int algorithm),
03018 dbl_ILLbasis_load (
03019 dbl_lpinfo * lp,
03020 dbl_ILLlp_basis * B),
03021 dbl_ILLbasis_tableau_row (
03022 dbl_lpinfo * lp,
03023 int row,
03024 double * brow,
03025 double * trow,
03026 double * rhs,
03027 int strict),
03028 dbl_ILLbasis_factor (
03029 dbl_lpinfo * lp,
03030 int *singular),
03031 dbl_ILLbasis_refactor (
03032 dbl_lpinfo * lp),
03033 dbl_ILLbasis_update (
03034 dbl_lpinfo * lp,
03035 dbl_svector * y,
03036 int lindex,
03037 int *refactor,
03038 int *singular);
03039
03040 void dbl_ILLbasis_column_solve (
03041 dbl_lpinfo * lp,
03042 dbl_svector * rhs,
03043 dbl_svector * soln),
03044 dbl_ILLbasis_column_solve_update (
03045 dbl_lpinfo * lp,
03046 dbl_svector * rhs,
03047 dbl_svector * upd,
03048 dbl_svector * soln),
03049 dbl_ILLbasis_row_solve (
03050 dbl_lpinfo * lp,
03051 dbl_svector * rhs,
03052 dbl_svector * soln),
03053 dbl_ILLbasis_free_basisinfo (
03054 dbl_lpinfo * lp),
03055 dbl_ILLbasis_free_fbasisinfo (
03056 dbl_lpinfo * lp),
03057 dbl_ILLbasis_init_basisinfo (
03058 dbl_lpinfo * lp);
03059
03060 #endif
03061
03062
03063
03064
03065
03066
03067
03068
03069
03070
03071
03072
03073
03074
03075
03076
03077
03078
03079
03080
03081
03082
03083 #ifndef dbl___DHEAPS_I_H__
03084 #define dbl___DHEAPS_I_H__
03085
03086
03087
03088
03089
03090
03091 typedef struct dbl_ILLdheap
03092 {
03093 double *key;
03094 int *entry;
03095 int *loc;
03096 int total_space;
03097 int size;
03098 }
03099 dbl_ILLdheap;
03100
03101 void dbl_ILLutil_dheap_free (
03102 dbl_ILLdheap * h),
03103 dbl_ILLutil_dheap_delete (
03104 dbl_ILLdheap * h,
03105 int i),
03106 dbl_ILLutil_dheap_changekey (
03107 dbl_ILLdheap * h,
03108 int i,
03109 double * newkey),
03110 dbl_ILLutil_dheap_findmin (
03111 dbl_ILLdheap * h,
03112 int *i),
03113 dbl_ILLutil_dheap_deletemin (
03114 dbl_ILLdheap * h,
03115 int *i);
03116
03117 int dbl_ILLutil_dheap_init (
03118 dbl_ILLdheap * h,
03119 int k),
03120 dbl_ILLutil_dheap_resize (
03121 dbl_ILLdheap * h,
03122 int newsize),
03123 dbl_ILLutil_dheap_insert (
03124 dbl_ILLdheap * h,
03125 int i);
03126
03127
03128
03129 #endif
03130
03131
03132
03133
03134
03135
03136
03137
03138
03139
03140
03141
03142
03143
03144
03145
03146
03147
03148
03149
03150
03151
03152
03153 #ifndef dbl___QS_QSOPT_H
03154 #define dbl___QS_QSOPT_H
03155
03156
03157 #ifdef WIN32
03158
03159 #ifdef QSLIB_EXPORTS
03160 #define dbl_QSLIB_INTERFACE __declspec(dllexport)
03161 #else
03162 #define dbl_QSLIB_INTERFACE __declspec(dllimport)
03163 #endif
03164
03165 #else
03166 #define dbl_QSLIB_INTERFACE extern
03167 #endif
03168
03169 #ifdef WIN32
03170 typedef struct dbl_QSLIB_INTERFACE dbl_qsdata *dbl_QSprob;
03171 typedef struct dbl_QSLIB_INTERFACE qsbasis *dbl_QSbas;
03172 #else
03173 typedef struct dbl_qsdata *dbl_QSprob;
03174 typedef struct qsbasis *dbl_QSbas;
03175 #endif
03176
03177
03178
03179
03180
03181
03182
03183
03184
03185
03186
03187
03188
03189
03190
03191
03192
03193
03194
03195
03196 #ifdef __cplusplus
03197 extern "C"
03198 {
03199 #endif
03200
03201 #ifdef WIN32
03202
03203
03204
03205
03206 dbl_QSLIB_INTERFACE int dbl_solver_main ( int argc, char **argv);
03207 dbl_QSLIB_INTERFACE int dbl_reader_main ( int argc, char **argv);
03208 #endif
03209
03210 dbl_QSLIB_INTERFACE void dbl_QSfree ( void *ptr),
03211 dbl_QSfree_prob ( dbl_QSprob p),
03212 dbl_QSfree_basis ( dbl_QSbas B),
03213 dbl_QSset_precision ( const unsigned prec),
03214
03215
03216 dbl_QSstart ( void),
03217
03218
03219 dbl_QSend ( void);
03220
03221
03222 dbl_QSLIB_INTERFACE int dbl_QSopt_primal ( dbl_QSprob p, int *status),
03223 dbl_QSopt_dual ( dbl_QSprob p, int *status),
03224 dbl_QSopt_pivotin_col ( dbl_QSprob p, int ccnt, int *clist),
03225 dbl_QSopt_pivotin_row ( dbl_QSprob p, int rcnt, int *rlist),
03226 dbl_QSopt_strongbranch ( dbl_QSprob p, int ncand, int *candidatelist,
03227 double * xlist, double * down_vals, double * up_vals,
03228 int iterations, double objbound),
03229 dbl_QSchange_objsense ( dbl_QSprob p, int newsense),
03230 dbl_QSget_objsense ( dbl_QSprob p, int *newsense),
03231 dbl_QSnew_col ( dbl_QSprob p,const double obj,const double lower,const double upper,
03232 const char *name),
03233 dbl_QSadd_cols ( dbl_QSprob p, int num, int *cmatcnt, int *cmatbeg, int *cmatind,
03234 double * cmatval, double * obj, double * lower,
03235 double * upper, const char **names),
03236 dbl_QSadd_col ( dbl_QSprob p, int cnt, int *cmatind, double * cmatval,
03237 double obj, double lower, double upper, const char *name),
03238 dbl_QSnew_row ( dbl_QSprob p,const double rhs, int sense, const char *name),
03239 dbl_QSadd_ranged_rows ( dbl_QSprob p, int num, int *rmatcnt, int *rmatbeg,
03240 int *rmatind,const double * rmatval,const double * rhs, char *sense,
03241 const double* range, const char **names),
03242 dbl_QSadd_ranged_row ( dbl_QSprob p, int cnt, int *rmatind,const double * rmatval,
03243 const double * rhs, int sense,const double * range, const char *name),
03244 dbl_QSadd_rows ( dbl_QSprob p, int num, int *rmatcnt, int *rmatbeg, int *rmatind,
03245 const double * rmatval,const double * rhs, char *sense, const char **names),
03246 dbl_QSadd_row ( dbl_QSprob p, int cnt, int *rmatind,const double * rmatval,
03247 const double * rhs, int sense, const char *name),
03248 dbl_QSdelete_rows ( dbl_QSprob p, int num, int *dellist),
03249 dbl_QSdelete_row ( dbl_QSprob p, int rowindex),
03250 dbl_QSdelete_setrows ( dbl_QSprob p, int *flags),
03251 dbl_QSdelete_named_row ( dbl_QSprob p, const char *rowname),
03252 dbl_QSdelete_named_rows_list ( dbl_QSprob p, int num, const char **rownames),
03253 dbl_QSdelete_cols ( dbl_QSprob p, int num, int *dellist),
03254 dbl_QSdelete_col ( dbl_QSprob p, int colindex),
03255 dbl_QSdelete_setcols ( dbl_QSprob p, int *flags),
03256 dbl_QSdelete_named_column ( dbl_QSprob p, const char *colname),
03257 dbl_QSdelete_named_columns_list ( dbl_QSprob p, int num, const char **colnames),
03258 dbl_QSchange_senses ( dbl_QSprob p, int num, int *rowlist, char *sense),
03259 dbl_QSchange_sense ( dbl_QSprob p, int rowindex, int sense),
03260 dbl_QSchange_coef ( dbl_QSprob p, int rowindex, int colindex, double coef),
03261 dbl_QSchange_objcoef ( dbl_QSprob p, int indx, double coef),
03262 dbl_QSchange_rhscoef ( dbl_QSprob p, int indx, double coef),
03263 dbl_QSchange_range(dbl_QSprob p, int rowindex, double range),
03264 dbl_QSchange_bounds ( dbl_QSprob p, int num, int *collist, char *lu,
03265 const double * bounds),
03266 dbl_QSchange_bound ( dbl_QSprob p, int indx, int lu,const double bound),
03267 dbl_QSload_basis ( dbl_QSprob p, dbl_QSbas B),
03268 dbl_QSread_and_load_basis ( dbl_QSprob p, const char *filename),
03269 dbl_QSload_basis_array ( dbl_QSprob p, char *cstat, char *rstat),
03270 dbl_QSload_basis_and_row_norms_array ( dbl_QSprob p, char *cstat, char *rstat,
03271 double * rownorms),
03272 dbl_QSget_basis_array ( dbl_QSprob p, char *cstat, char *rstat),
03273 dbl_QSget_basis_and_row_norms_array ( dbl_QSprob p, char *cstat, char *rstat,
03274 double * rownorms),
03275 dbl_QSget_binv_row ( dbl_QSprob p, int indx, double * binvrow),
03276 dbl_QSget_tableau_row ( dbl_QSprob p, int indx, double * tableaurow),
03277 dbl_QSget_basis_order ( dbl_QSprob p, int *basorder),
03278 dbl_QSget_coef (dbl_QSprob p, int rowindex, int colindex, double*coef),
03279 dbl_QSget_status ( dbl_QSprob p, int *status),
03280 dbl_QSget_solution ( dbl_QSprob p, double * value, double * x,
03281 double * pi, double * slack, double * rc),
03282 dbl_QSget_objval ( dbl_QSprob p, double * value),
03283 dbl_QSget_pi_array ( dbl_QSprob p, double * pi),
03284 dbl_QSget_rc_array ( dbl_QSprob p, double * rc),
03285 dbl_QSget_x_array ( dbl_QSprob p, double * x),
03286 dbl_QSget_slack_array ( dbl_QSprob p, double * slack),
03287 dbl_QSget_infeas_array ( dbl_QSprob p, double * pi),
03288 dbl_QSget_colcount ( dbl_QSprob p),
03289 dbl_QSget_rowcount ( dbl_QSprob p),
03290 dbl_QSget_nzcount ( dbl_QSprob p),
03291 dbl_QSget_obj_list(dbl_QSprob p, int num, int*collist, double*obj),
03292 dbl_QSget_obj ( dbl_QSprob p, double * obj),
03293 dbl_QSget_rhs ( dbl_QSprob p, double * rhs),
03294 dbl_QSget_ranged_rows_list ( dbl_QSprob p, int num, int *rowlist, int **rowcnt,
03295 int **rowbeg, int **rowind, double ** rowval, double ** rhs,
03296 char **sense, double **range, char ***names),
03297 dbl_QSget_ranged_rows ( dbl_QSprob p, int **rowcnt, int **rowbeg, int **rowind,
03298 double ** rowval, double ** rhs, char **sense,
03299 double ** range, char ***names),
03300 dbl_QSget_senses ( dbl_QSprob p, char*senses),
03301 dbl_QSget_rows_list ( dbl_QSprob p, int num, int *rowlist, int **rowcnt,
03302 int **rowbeg, int **rowind, double ** rowval, double ** rhs,
03303 char **sense, char ***names),
03304 dbl_QSget_rows ( dbl_QSprob p, int **rowcnt, int **rowbeg, int **rowind,
03305 double ** rowval, double ** rhs, char **sense, char ***names),
03306 dbl_QSget_columns_list ( dbl_QSprob p, int num, int *collist, int **colcnt,
03307 int **colbeg, int **colind, double ** colval, double ** obj,
03308 double ** lower, double ** upper, char ***names),
03309 dbl_QSget_columns ( dbl_QSprob p, int **colcnt, int **colbeg, int **colind,
03310 double ** colval, double ** obj, double ** lower,
03311 double ** upper, char ***names),
03312 dbl_QSget_rownames ( dbl_QSprob p, char **rownames),
03313 dbl_QSget_colnames ( dbl_QSprob p, char **colnames),
03314 dbl_QSget_bound ( dbl_QSprob p, int colindex, int lu, double * bound),
03315 dbl_QSget_bounds ( dbl_QSprob p, double * lower, double * upper),
03316 dbl_QSget_bounds_list(dbl_QSprob p, int num, int*collist, double*lb,
03317 double*ub),
03318 dbl_QSget_intflags ( dbl_QSprob p, int *intflags),
03319 dbl_QSget_intcount ( dbl_QSprob p, int *count),
03320 dbl_QSget_column_index ( dbl_QSprob p, const char *name, int *colindex),
03321 dbl_QSget_row_index ( dbl_QSprob p, const char *name, int *rowindex),
03322 dbl_QSget_named_x ( dbl_QSprob p, const char *colname, double * val),
03323 dbl_QSget_named_rc ( dbl_QSprob p, const char *colname, double * val),
03324 dbl_QSget_named_pi ( dbl_QSprob p, const char *rowname, double * val),
03325 dbl_QSget_named_slack ( dbl_QSprob p, const char *rowname, double * val),
03326 dbl_QScompute_row_norms ( dbl_QSprob p),
03327 dbl_QSwrite_prob ( dbl_QSprob p, const char *filename, const char *filetype),
03328 dbl_QSwrite_prob_file ( dbl_QSprob p, FILE * file, const char *filetype),
03329 dbl_QSwrite_basis ( dbl_QSprob p, dbl_QSbas B, const char *filename),
03330 dbl_QStest_row_norms ( dbl_QSprob p),
03331 dbl_QSget_itcnt(dbl_QSprob p, int *pI_iter, int *pII_iter, int *dI_iter,
03332 int *dII_iter, int *tot_iter),
03333 dbl_QSset_param ( dbl_QSprob p, int whichparam, int newvalue),
03334 dbl_QSset_param_EGlpNum ( dbl_QSprob p, int whichparam, double newvalue),
03335 dbl_QSget_param ( dbl_QSprob p, int whichparam, int *value),
03336 dbl_QSget_param_EGlpNum ( dbl_QSprob p, int whichparam, double * value);
03337
03338 dbl_QSLIB_INTERFACE char *dbl_QSget_probname ( dbl_QSprob p);
03339 dbl_QSLIB_INTERFACE char *dbl_QSget_objname ( dbl_QSprob p);
03340 dbl_QSLIB_INTERFACE char *dbl_QSversion ( void);
03341
03342 dbl_QSLIB_INTERFACE dbl_QSprob dbl_QScreate_prob ( const char *name, int objsense),
03343 dbl_QSread_prob ( const char *filename, const char *filetype),
03344 dbl_QSload_prob ( const char *probname, int ncols, int nrows, int *cmatcnt,
03345 int *cmatbeg, int *cmatind, double * cmatval, int objsense,
03346 double * obj, double * rhs, char *sense, double * lower,
03347 double * upper, const char **colnames, const char **rownames),
03348 dbl_QScopy_prob ( dbl_QSprob p, const char *newname);
03349
03350 dbl_QSLIB_INTERFACE dbl_QSbas dbl_QSget_basis ( dbl_QSprob p),
03351 dbl_QSread_basis ( dbl_QSprob p, const char *filename);
03352
03353 #ifdef __cplusplus
03354 }
03355 #endif
03356
03357
03358
03359
03360
03361
03362
03363
03364
03365
03366
03367
03368
03369
03370
03371
03372
03373
03374 #ifdef WIN32
03375 typedef struct dbl_QSLIB_INTERFACE dbl_qsline_reader *dbl_QSline_reader;
03376 typedef struct dbl_QSLIB_INTERFACE dbl_qsformat_error *dbl_QSformat_error;
03377 typedef struct dbl_QSLIB_INTERFACE dbl_qserror_collector *dbl_QSerror_collector;
03378 typedef struct dbl_QSLIB_INTERFACE dbl_qserror_memory *dbl_QSerror_memory;
03379 #else
03380 typedef struct dbl_qsline_reader *dbl_QSline_reader;
03381 typedef struct dbl_qsformat_error *dbl_QSformat_error;
03382 typedef struct dbl_qserror_collector *dbl_QSerror_collector;
03383 typedef struct dbl_qserror_memory *dbl_QSerror_memory;
03384 #endif
03385
03386 #ifdef __cplusplus
03387 extern "C"
03388 {
03389 #endif
03390 dbl_QSLIB_INTERFACE const char *dbl_QSformat_error_type_string (
03391 int tp);
03392
03393 dbl_QSLIB_INTERFACE int dbl_QSerror_get_type (
03394 dbl_QSformat_error error);
03395 dbl_QSLIB_INTERFACE const char *dbl_QSerror_get_desc (
03396 dbl_QSformat_error error);
03397 dbl_QSLIB_INTERFACE int dbl_QSerror_get_line_number (
03398 dbl_QSformat_error error);
03399 dbl_QSLIB_INTERFACE int dbl_QSerror_get_pos (
03400 dbl_QSformat_error error);
03401 dbl_QSLIB_INTERFACE const char *dbl_QSerror_get_line (
03402 dbl_QSformat_error error);
03403 dbl_QSLIB_INTERFACE void dbl_QSerror_print (
03404 FILE * f,
03405 dbl_QSformat_error error);
03406
03407 dbl_QSLIB_INTERFACE dbl_QSerror_collector dbl_QSerror_collector_new (
03408 void *fct,
03409 void *dest);
03410 dbl_QSLIB_INTERFACE dbl_QSerror_collector dbl_QSerror_memory_collector_new (
03411 dbl_QSerror_memory mem);
03412 dbl_QSLIB_INTERFACE void dbl_QSerror_collector_free (
03413 dbl_QSerror_collector c);
03414
03415
03416
03417
03418 dbl_QSLIB_INTERFACE dbl_QSline_reader dbl_QSline_reader_new (
03419 void *fct,
03420 void *data_src);
03421
03422
03423 dbl_QSLIB_INTERFACE void dbl_QSline_reader_free (
03424 dbl_QSline_reader reader);
03425
03426 dbl_QSLIB_INTERFACE void dbl_QSline_reader_set_error_collector (
03427 dbl_QSline_reader reader,
03428 dbl_QSerror_collector collector);
03429
03430 dbl_QSLIB_INTERFACE char *dbl_QSline_reader_get (
03431 dbl_QSline_reader reader,
03432 char *s,
03433 int size);
03434
03435 dbl_QSLIB_INTERFACE dbl_QSprob dbl_QSget_prob (
03436 dbl_QSline_reader reader,
03437 const char *probname,
03438 const char *filetype);
03439
03440
03441
03442
03443
03444
03445
03446 dbl_QSLIB_INTERFACE dbl_QSerror_memory dbl_QSerror_memory_create (
03447 int takeErrorLines);
03448 dbl_QSLIB_INTERFACE void dbl_QSerror_memory_free (
03449 dbl_QSerror_memory mem);
03450
03451 dbl_QSLIB_INTERFACE int dbl_QSerror_memory_get_nof (
03452 dbl_QSerror_memory mem,
03453 int error_type);
03454 dbl_QSLIB_INTERFACE int dbl_QSerror_memory_get_nerrors (
03455 dbl_QSerror_memory mem);
03456
03457 dbl_QSLIB_INTERFACE dbl_QSformat_error dbl_QSerror_memory_get_last_error (
03458 dbl_QSerror_memory mem);
03459 dbl_QSLIB_INTERFACE dbl_QSformat_error dbl_QSerror_memory_get_prev_error (
03460 dbl_QSformat_error e);
03461
03462
03463
03464
03465 dbl_QSLIB_INTERFACE void dbl_QSset_reporter (
03466 dbl_QSprob prob,
03467 int iterskip,
03468 void *fct,
03469 void *dest);
03470
03471 dbl_QSLIB_INTERFACE int dbl_QSreport_prob (
03472 dbl_QSprob p,
03473 const char *filetype,
03474 dbl_QSerror_collector c);
03475
03476 #ifdef __cplusplus
03477 }
03478 #endif
03479 #endif
03480
03481
03482
03483
03484
03485
03486
03487
03488
03489
03490
03491
03492
03493
03494
03495
03496
03497
03498
03499
03500
03501
03502
03503 #ifndef dbl_QS_FORMAT_ERROR_H
03504 #define dbl_QS_FORMAT_ERROR_H
03505
03506
03507
03508
03509
03510
03511
03512
03513
03514
03515
03516
03517
03518
03519
03520
03521
03522
03523
03524
03525
03526
03527
03528
03529
03530
03531
03532
03533
03534 typedef struct dbl_qsformat_error
03535 {
03536 char *desc;
03537 char *theLine;
03538 struct dbl_qsformat_error *next;
03539 int type;
03540 int lineNumber;
03541 int at;
03542 }
03543 dbl_qsformat_error;
03544
03545 extern int dbl_ILLformat_error_create (
03546 dbl_qsformat_error * error,
03547 int mode,
03548 const char *desc,
03549 int lineNum,
03550 const char *theLine,
03551 int atPos);
03552 extern void dbl_ILLformat_error_delete (
03553 dbl_qsformat_error * error);
03554
03555 extern void dbl_ILLformat_error_print (
03556 EGioFile_t * out,
03557 dbl_qsformat_error * e);
03558
03559
03560
03561
03562
03563
03564
03565
03566
03567 typedef int (
03568 *dbl_qsadd_error_fct) (
03569 void *dest,
03570 const dbl_qsformat_error * error);
03571
03572 typedef struct dbl_qserror_collector
03573 {
03574 dbl_qsadd_error_fct add_error;
03575 void *dest;
03576 }
03577 dbl_qserror_collector;
03578
03579 typedef struct dbl_qserror_memory
03580 {
03581 unsigned int nerror;
03582 dbl_qsformat_error *error_list;
03583 char has_error[QS_INPUT_NERROR];
03584 char hasErrorLines;
03585 }
03586 dbl_qserror_memory;
03587
03588
03589 extern dbl_qserror_collector *dbl_ILLerror_collector_new (
03590 dbl_qsadd_error_fct fct,
03591 void *dest);
03592
03593 dbl_qserror_collector *dbl_ILLerror_memory_collector_new (
03594 dbl_qserror_memory * dest);
03595
03596 extern void dbl_ILLerror_collector_free (
03597 dbl_qserror_collector * c);
03598
03599 #define dbl_ILLformat_error(collector, error) \
03600 ((collector)->add_error((collector)->dest, error))
03601
03602
03603 extern int dbl_ILLadd_error_to_memory (
03604 void *dest,
03605 const dbl_qsformat_error * error);
03606
03607 extern dbl_qserror_memory *dbl_ILLerror_memory_create (
03608 int takeErrorLines);
03609 extern void dbl_ILLerror_memory_free (
03610 dbl_qserror_memory * mem);
03611
03612 #endif
03613
03614
03615
03616
03617
03618
03619
03620
03621
03622
03623
03624
03625
03626
03627
03628
03629
03630
03631
03632
03633
03634
03635
03636 #ifndef dbl___ILL_RAWLP_H_
03637 #define dbl___ILL_RAWLP_H_
03638
03639
03640
03641
03642
03643
03644
03645
03646
03647 #define dbl_ILL_ISBLANK(p) \
03648 (((*(p))==' '||(*(p))=='\t'||(*(p))=='\r'||(*(p))=='\f') ? 1 : 0)
03649
03650
03651
03652
03653
03654
03655 typedef struct dbl_rawlpdata
03656 {
03657 char *name;
03658
03659 char *rhsname;
03660 char *rangesname;
03661 char *boundsname;
03662
03663 int objsense;
03664 int objindex;
03665
03666 int nrows;
03667 ILLsymboltab rowtab;
03668
03669 int sensesize;
03670 char *rowsense;
03671
03672 char *rhsind;
03673
03674 int rhssize;
03675 double *rhs;
03676 char *rangesind;
03677 struct dbl_colptr *ranges;
03678
03679 int ncols;
03680 ILLsymboltab coltab;
03681 int colsize;
03682 struct dbl_colptr **cols;
03683
03684 char *lbind;
03685 char *ubind;
03686 double *lower;
03687 double *upper;
03688
03689 int intsize;
03690 char *intmarker;
03691
03692
03693 char *refrow;
03694 int refrowind;
03695
03696 int is_sos_size;
03697 int *is_sos_member;
03698
03699
03700
03701 int nsos_member;
03702 int sos_weight_size;
03703 double *sos_weight;
03704
03705 int sos_col_size;
03706 int *sos_col;
03707
03708 int nsos;
03709 int sos_setsize;
03710 struct dbl_sosptr *sos_set;
03711
03712
03713 dbl_qserror_collector *error_collector;
03714 ILLptrworld ptrworld;
03715 }
03716 dbl_rawlpdata;
03717
03718 typedef struct dbl_colptr
03719 {
03720 double coef;
03721 struct dbl_colptr *next;
03722 int this_val;
03723 }
03724 dbl_colptr;
03725 extern dbl_colptr *dbl_ILLcolptralloc (
03726 ILLptrworld * p);
03727
03728 typedef struct dbl_sosptr
03729 {
03730 int nelem;
03731 int first;
03732 char type;
03733 }
03734 dbl_sosptr;
03735 extern const int dbl_ILL_SOS_TYPE1;
03736 extern const int dbl_ILL_SOS_TYPE2;
03737
03738 extern void dbl_ILLinit_rawlpdata (
03739 dbl_rawlpdata * lp,
03740 dbl_qserror_collector * collector);
03741 extern void dbl_ILLfree_rawlpdata (
03742 dbl_rawlpdata * lp);
03743 extern void dbl_ILLraw_clear_matrix (
03744 dbl_rawlpdata * lp);
03745
03746 extern const char *dbl_ILLraw_rowname (
03747 dbl_rawlpdata * lp,
03748 int i);
03749 extern const char *dbl_ILLraw_colname (
03750 dbl_rawlpdata * lp,
03751 int i);
03752
03753 extern int dbl_ILLraw_add_col (
03754 dbl_rawlpdata * lp,
03755 const char *name,
03756 int intmarker);
03757 extern int dbl_ILLraw_add_row (
03758 dbl_rawlpdata * lp,
03759 const char *name,
03760 int sense,
03761 const double rhs);
03762
03763 extern int dbl_ILLraw_add_col_coef (
03764 dbl_rawlpdata * lp,
03765 int colind,
03766 int rowind,
03767 double coef);
03768
03769 extern int dbl_ILLraw_init_ranges (
03770 dbl_rawlpdata * lp);
03771 extern int dbl_ILLraw_init_rhs (
03772 dbl_rawlpdata * lp);
03773
03774 extern int dbl_ILLraw_add_ranges_coef (
03775 dbl_rawlpdata * lp,
03776 int rowind,
03777 double coef);
03778
03779
03780 extern int dbl_ILLraw_add_sos (
03781 dbl_rawlpdata * lp,
03782 int sos_type);
03783
03784
03785 extern int dbl_ILLraw_add_sos_member (
03786 dbl_rawlpdata * lp,
03787 int colind);
03788
03789
03790 extern int dbl_ILLraw_is_mem_other_sos (
03791 dbl_rawlpdata * lp,
03792 int colind);
03793
03794 extern int dbl_ILLraw_set_rhs_name (
03795 dbl_rawlpdata * lp,
03796 const char *name,
03797 int *skip);
03798 extern int dbl_ILLraw_set_bounds_name (
03799 dbl_rawlpdata * lp,
03800 const char *name,
03801 int *skip);
03802 extern int dbl_ILLraw_set_ranges_name (
03803 dbl_rawlpdata * lp,
03804 const char *name,
03805 int *skip);
03806 extern void dbl_ILLprint_rawlpdata (
03807 dbl_rawlpdata * lp);
03808
03809 extern char *dbl_ILLraw_unique_name (
03810 ILLsymboltab * tab,
03811 char *prefix,
03812 int i);
03813 extern int dbl_ILLraw_fill_in_rownames (
03814 dbl_rawlpdata * lp);
03815
03816 extern int dbl_ILLraw_init_bounds (
03817 dbl_rawlpdata * lp);
03818
03819 extern const char *dbl_ILLraw_set_lowerBound (
03820 dbl_rawlpdata * lp,
03821 int i,
03822 double bnd);
03823 extern const char *dbl_ILLraw_set_upperBound (
03824 dbl_rawlpdata * lp,
03825 int i,
03826 double bnd);
03827 extern const char *dbl_ILLraw_set_fixedBound (
03828 dbl_rawlpdata * lp,
03829 int i,
03830 double bnd);
03831 extern const char *dbl_ILLraw_set_binaryBound (
03832 dbl_rawlpdata * lp,
03833 int i);
03834 extern const char *dbl_ILLraw_set_unbound (
03835 dbl_rawlpdata * lp,
03836 int colind);
03837 extern int dbl_ILLraw_fill_in_bounds (
03838 dbl_rawlpdata * lp);
03839
03840 extern int dbl_ILLraw_first_nondefault_bound (
03841 dbl_ILLlpdata * lp);
03842 extern int dbl_ILLraw_default_lower (
03843 dbl_ILLlpdata * lp,
03844 int i);
03845 extern int dbl_ILLraw_default_upper (
03846 dbl_ILLlpdata * lp,
03847 int i,
03848 int ri);
03849
03850 extern int dbl_ILLrawlpdata_to_lpdata (
03851 dbl_rawlpdata * raw,
03852 dbl_ILLlpdata * lp);
03853
03854 extern int dbl_ILLdata_error (
03855 dbl_qserror_collector * collector,
03856 const char *format,
03857 ...);
03858 extern void dbl_ILLdata_warn (
03859 dbl_qserror_collector * collector,
03860 const char *format,
03861 ...);
03862
03863 #endif
03864
03865
03866
03867
03868
03869
03870
03871
03872
03873
03874
03875
03876
03877
03878
03879
03880
03881
03882
03883
03884
03885
03886
03887 #ifndef dbl_MPS_H
03888 #define dbl_MPS_H
03889
03890
03891
03892
03893
03894
03895
03896 extern const char *dbl_ILLmps_section_name[ILL_MPS_N_SECTIONS + 2];
03897
03898
03899 extern int dbl_ILLread_mps (
03900 dbl_qsline_reader * file,
03901 const char *filename,
03902 dbl_rawlpdata * lp);
03903
03904 extern int dbl_ILLwrite_mps (
03905 dbl_ILLlpdata * lp,
03906 dbl_qserror_collector * collector);
03907
03908
03909
03910 #endif
03911
03912
03913
03914
03915
03916
03917
03918
03919
03920
03921
03922
03923
03924
03925
03926
03927
03928
03929
03930
03931
03932
03933
03934 #ifndef dbl___PRICE_H
03935 #define dbl___PRICE_H
03936
03937
03938 typedef struct dbl_price_res
03939 {
03940 int eindex;
03941 int dir;
03942 int lindex;
03943 int lvstat;
03944 int price_stat;
03945 double dinfeas;
03946 double pinfeas;
03947 }
03948 dbl_price_res;
03949
03950 int dbl_ILLprice_test_for_heap (
03951 dbl_lpinfo * const lp,
03952 dbl_price_info * const pinf,
03953 int const nkeys,
03954 double * keylist,
03955 int const algo,
03956 int const upd),
03957 dbl_ILLprice_build_heap (
03958 dbl_price_info * const pinf,
03959 int const nkeys,
03960 double * keylist),
03961 dbl_ILLprice_build_pricing_info (
03962 dbl_lpinfo * const lp,
03963 dbl_price_info * const pinf,
03964 int const phase),
03965 dbl_ILLprice_update_pricing_info (
03966 dbl_lpinfo * const lp,
03967 dbl_price_info * const pinf,
03968 int const phase,
03969 dbl_svector * const wz,
03970 int const eindex,
03971 int const lindex,
03972 double y),
03973 dbl_ILLprice_get_price (
03974 dbl_price_info * const p,
03975 int const phase),
03976 dbl_ILLprice_build_mpartial_info (
03977 dbl_lpinfo * const lp,
03978 dbl_price_info * const pinf,
03979 int const pricetype),
03980 dbl_ILLprice_build_pdevex_norms (
03981 dbl_lpinfo * const lp,
03982 dbl_p_devex_info * const pdinfo,
03983 int const reinit),
03984 dbl_ILLprice_update_pdevex_norms (
03985 dbl_lpinfo * const lp,
03986 dbl_p_devex_info * const pdinfo,
03987 int const eindex,
03988 double yl),
03989 dbl_ILLprice_build_psteep_norms (
03990 dbl_lpinfo * const lp,
03991 dbl_p_steep_info * const psinfo),
03992 dbl_ILLprice_build_ddevex_norms (
03993 dbl_lpinfo * const lp,
03994 dbl_d_devex_info * const ddinfo,
03995 int const reinit),
03996 dbl_ILLprice_update_ddevex_norms (
03997 dbl_lpinfo * const lp,
03998 dbl_d_devex_info * const ddinfo,
03999 int const eindex,
04000 double yl),
04001 dbl_ILLprice_build_dsteep_norms (
04002 dbl_lpinfo * const lp,
04003 dbl_d_steep_info * const dsinfo),
04004 dbl_ILLprice_get_dsteep_norms (
04005 dbl_lpinfo * const lp,
04006 int const count,
04007 int *constrowind,
04008 double * const norms),
04009 dbl_ILLprice_get_rownorms (
04010 dbl_lpinfo * const lp,
04011 dbl_price_info * const pinf,
04012 double * const rnorms),
04013 dbl_ILLprice_get_colnorms (
04014 dbl_lpinfo * const lp,
04015 dbl_price_info * const pinf,
04016 double * const cnorms),
04017 dbl_ILLprice_get_newnorms (
04018 dbl_lpinfo * const lp,
04019 int const nelems,
04020 double * const norms,
04021 int *const matcnt,
04022 int *const matbeg,
04023 int *const matind,
04024 double * const matval,
04025 int const option),
04026 dbl_ILLprice_get_new_rownorms (
04027 dbl_lpinfo * const lp,
04028 int const newrows,
04029 double * const rnorms,
04030 int *const rmatcnt,
04031 int *const rmatbeg,
04032 int *const rmatind,
04033 double * const rmatval),
04034 dbl_ILLprice_get_new_colnorms (
04035 dbl_lpinfo * const lp,
04036 int const newrows,
04037 double * const rnorms,
04038 int *const matcnt,
04039 int *const matbeg,
04040 int *const matind,
04041 double * const matval),
04042 dbl_ILLprice_load_rownorms (
04043 dbl_lpinfo * const lp,
04044 double * const rnorms,
04045 dbl_price_info * const pinf),
04046 dbl_ILLprice_load_colnorms (
04047 dbl_lpinfo * const lp,
04048 double * const cnorms,
04049 dbl_price_info * const pinf);
04050
04051
04052 void dbl_ILLprice_free_heap (
04053 dbl_price_info * const pinf),
04054 dbl_ILLprice_init_pricing_info (
04055 dbl_price_info * const pinf),
04056 dbl_ILLprice_free_pricing_info (
04057 dbl_price_info * const pinf),
04058 dbl_ILLprice_free_mpartial_info (
04059 dbl_mpart_info * p),
04060 dbl_ILLprice_init_mpartial_price (
04061 dbl_lpinfo * const lp,
04062 dbl_price_info * const pinf,
04063 int const phase,
04064 int const pricetype),
04065 dbl_ILLprice_update_mpartial_price (
04066 dbl_lpinfo * const lp,
04067 dbl_price_info * const pinf,
04068 int const phase,
04069 int const pricetype),
04070 dbl_ILLprice_delete_onempart_price (
04071
04072 dbl_price_info * const pinf,
04073 int const indx,
04074 int const pricetype),
04075 dbl_ILLprice_mpartial_group (
04076 dbl_lpinfo * const lp,
04077 dbl_mpart_info * const p,
04078 int const phase,
04079 int const g,
04080 int const pricetype),
04081 dbl_ILLprice_column (
04082 dbl_lpinfo * const lp,
04083 int const ix,
04084 int const phase,
04085 dbl_price_res * const pr),
04086 dbl_ILLprice_row (
04087 dbl_lpinfo * const lp,
04088 int const ix,
04089 int const phase,
04090 dbl_price_res * const pr),
04091 dbl_ILLprice_update_psteep_norms (
04092 dbl_lpinfo * lp,
04093 dbl_p_steep_info * psinfo,
04094 dbl_svector * wz,
04095 int eindex,
04096 double yl),
04097 dbl_ILLprice_update_dsteep_norms (
04098 dbl_lpinfo * const lp,
04099 dbl_d_steep_info * const dsinfo,
04100 dbl_svector * const wz,
04101 int const lindex,
04102 double yl),
04103 dbl_ILLprice_compute_dual_inf (
04104 dbl_lpinfo * const lp,
04105 dbl_price_info * const p,
04106 int *const ix,
04107 int const icnt,
04108 int const phase),
04109 dbl_ILLprice_primal (
04110 dbl_lpinfo * const lp,
04111 dbl_price_info * const pinf,
04112 dbl_price_res * const pr,
04113 int const phase),
04114 dbl_ILLprice_compute_primal_inf (
04115 dbl_lpinfo * const lp,
04116 dbl_price_info * const p,
04117 int *const ix,
04118 int const icnt,
04119 int const phase),
04120 dbl_ILLprice_dual (
04121 dbl_lpinfo * const lp,
04122 dbl_price_info * const pinf,
04123 int const phase,
04124 dbl_price_res * const pr);
04125
04126 void dbl_test_dsteep_norms (
04127 dbl_lpinfo * const lp,
04128 dbl_price_info * const p);
04129
04130 #endif
04131
04132
04133
04134
04135
04136
04137
04138
04139
04140
04141
04142
04143
04144
04145
04146
04147
04148
04149
04150
04151
04152
04153 #ifndef dbl___PRIORITY_H__
04154 #define dbl___PRIORITY_H__
04155
04156
04157
04158
04159
04160
04161 typedef struct dbl_ILLpriority
04162 {
04163 dbl_ILLdheap dbl_heap;
04164 union dbl_ILLpri_data
04165 {
04166 void *data;
04167 int next;
04168 }
04169 *pri_info;
04170 int space;
04171 int freelist;
04172 }
04173 dbl_ILLpriority;
04174
04175 void dbl_ILLutil_priority_free (
04176 dbl_ILLpriority * pri),
04177 dbl_ILLutil_priority_delete (
04178 dbl_ILLpriority * pri,
04179 int handle),
04180 dbl_ILLutil_priority_changekey (
04181 dbl_ILLpriority * pri,
04182 int handle,
04183 double * newkey),
04184 dbl_ILLutil_priority_findmin (
04185 dbl_ILLpriority * pri,
04186 double * keyval,
04187 void **en),
04188 dbl_ILLutil_priority_deletemin (
04189 dbl_ILLpriority * pri,
04190 double * keyval,
04191 void **en);
04192
04193 int dbl_ILLutil_priority_init (
04194 dbl_ILLpriority * pri,
04195 int k),
04196 dbl_ILLutil_priority_insert (
04197 dbl_ILLpriority * pri,
04198 void *data,
04199 double * keyval,
04200 int *handle);
04201
04202
04203
04204 #endif
04205
04206
04207
04208
04209
04210
04211
04212
04213
04214
04215
04216
04217
04218
04219
04220
04221
04222
04223
04224
04225
04226
04227
04228 #ifndef dbl___RATIO_H
04229 #define dbl___RATIO_H
04230 typedef struct dbl_ratio_res
04231 {
04232 double tz;
04233 int eindex;
04234 int lindex;
04235 int lvstat;
04236 int ratio_stat;
04237 int boundch;
04238 int coeffch;
04239 double lbound;
04240 double ecoeff;
04241 double pivotval;
04242 }
04243 dbl_ratio_res;
04244
04245 void dbl_ILLratio_pI_test (
04246 dbl_lpinfo * const lp,
04247 int const eindex,
04248 int const dir,
04249 dbl_ratio_res * const rs),
04250 dbl_ILLratio_pII_test (
04251 dbl_lpinfo * const lp,
04252 int const eindex,
04253 int const dir,
04254 dbl_ratio_res * const rs),
04255 dbl_ILLratio_dI_test (
04256 dbl_lpinfo * const lp,
04257 int const lindex,
04258 int const lvstat,
04259 dbl_ratio_res * const rs),
04260 dbl_ILLratio_dII_test (
04261 dbl_lpinfo * const lp,
04262
04263 int const lvstat,
04264 dbl_ratio_res * const rs),
04265 dbl_ILLratio_longdII_test (
04266 dbl_lpinfo * const lp,
04267 int const lindex,
04268 int const lvstat,
04269 dbl_ratio_res * const rs),
04270 dbl_ILLratio_pivotin_test (
04271 dbl_lpinfo * const lp,
04272 int *const rlist,
04273 int const rcnt,
04274 dbl_ratio_res * const rs);
04275
04276 #endif
04277
04278
04279
04280
04281
04282
04283
04284
04285
04286
04287
04288
04289
04290
04291
04292
04293
04294
04295
04296
04297
04298
04299
04300 #ifndef dbl_READ_LP_STATE_H
04301 #define dbl_READ_LP_STATE_H
04302
04303
04304
04305
04306
04307
04308
04309
04310
04311
04312
04313
04314
04315
04316 typedef struct dbl_ILLread_lp_state
04317 {
04318 dbl_qsline_reader *file;
04319 const char *file_name;
04320 char *p;
04321 double bound_val;
04322 int dbl_interactive;
04323 int line_num;
04324 int column_index;
04325 char realline[ILL_namebufsize];
04326 char line[ILL_namebufsize];
04327 char field[ILL_namebufsize + 1];
04328 char fieldOnFirstCol;
04329 char eof;
04330 char sense_val;
04331 }
04332 dbl_ILLread_lp_state;
04333
04334 extern int dbl_ILLread_lp_state_init (
04335 dbl_ILLread_lp_state * state,
04336 dbl_qsline_reader * file,
04337 const char *dbl_fname,
04338 int interactve);
04339 extern int dbl_ILLread_lp_state_next_line (
04340 dbl_ILLread_lp_state * state);
04341 extern int dbl_ILLread_lp_state_next_var (
04342 dbl_ILLread_lp_state * state);
04343 extern int dbl_ILLread_lp_state_keyword (
04344 dbl_ILLread_lp_state * state,
04345 const char **kwd);
04346 extern int dbl_ILLread_lp_state_bad_keyword (
04347 dbl_ILLread_lp_state * state);
04348 extern int dbl_ILLtest_lp_state_keyword (
04349 dbl_ILLread_lp_state * state,
04350 const char *kwd[]);
04351 extern int dbl_ILLread_lp_state_next_field (
04352 dbl_ILLread_lp_state * state);
04353 extern int dbl_ILLread_lp_state_next_field_on_line (
04354 dbl_ILLread_lp_state * state);
04355 extern void dbl_ILLread_lp_state_prev_field (
04356 dbl_ILLread_lp_state * state);
04357 extern int dbl_ILLread_lp_state_sign (
04358 dbl_ILLread_lp_state * state,
04359 double * sign);
04360 extern int dbl_ILLread_lp_state_possible_coef (
04361 dbl_ILLread_lp_state * state,
04362 double * coef,
04363 const double defValue);
04364
04365
04366
04367 extern int dbl_ILLread_lp_state_possible_bound_value (
04368 dbl_ILLread_lp_state * state);
04369
04370
04371
04372 extern int dbl_ILLread_lp_state_colon (
04373 dbl_ILLread_lp_state * state);
04374 extern int dbl_ILLread_lp_state_has_colon (
04375 dbl_ILLread_lp_state * state);
04376 extern int dbl_ILLread_lp_statxe_has_colon (
04377 dbl_ILLread_lp_state * state);
04378 extern int dbl_ILLread_lp_state_next_constraint (
04379 dbl_ILLread_lp_state * state);
04380 extern int dbl_ILLread_lp_state_sense (
04381 dbl_ILLread_lp_state * state);
04382 extern int dbl_ILLtest_lp_state_sense (
04383 dbl_ILLread_lp_state * state,
04384 int all);
04385 extern void dbl_ILLtest_lp_state_bound_sense (
04386 dbl_ILLread_lp_state * state);
04387 extern int dbl_ILLread_lp_state_value (
04388 dbl_ILLread_lp_state * state,
04389 double * d);
04390 extern int dbl_ILLtest_lp_state_next_is (
04391 dbl_ILLread_lp_state * state,
04392 const char *str);
04393 extern int dbl_ILLread_lp_state_skip_blanks (
04394 dbl_ILLread_lp_state * state,
04395 int wrapLines);
04396
04397 extern int dbl_ILLcheck_subject_to (
04398 dbl_ILLread_lp_state * state);
04399
04400
04401
04402
04403 extern int dbl_ILLlp_error (
04404 dbl_ILLread_lp_state * state,
04405 const char *format,
04406 ...);
04407 extern void dbl_ILLlp_warn (
04408 dbl_ILLread_lp_state * state,
04409 const char *format,
04410 ...);
04411
04412
04413
04414
04415 extern int dbl_ILLget_value (
04416 char *line,
04417 double * coef);
04418
04419 #endif
04420
04421
04422
04423
04424
04425
04426
04427
04428
04429
04430
04431
04432
04433
04434
04435
04436
04437
04438
04439
04440
04441
04442
04443 #ifndef dbl_READ_MPS_STATE_H
04444 #define dbl_READ_MPS_STATE_H
04445
04446
04447
04448 typedef struct dbl_ILLread_mps_state_struct
04449 {
04450 int section[ILL_MPS_N_SECTIONS];
04451 ILLmps_section active;
04452 const char *file_name;
04453 dbl_qsline_reader *file;
04454 unsigned int line_num;
04455 unsigned int field_num;
04456 int intvar;
04457 int sosvar;
04458 char line[ILL_namebufsize];
04459 char key[ILL_namebufsize];
04460 char field[ILL_namebufsize];
04461 char *obj;
04462 char *p;
04463 }
04464 dbl_ILLread_mps_state;
04465
04466 extern int dbl_ILLmps_state_init (
04467 dbl_ILLread_mps_state * state,
04468 dbl_qsline_reader * file,
04469 const char *dbl_fname);
04470 extern void dbl_ILLmps_state_clear (
04471 dbl_ILLread_mps_state * state);
04472 extern int dbl_ILLmps_set_section (
04473 dbl_ILLread_mps_state * state,
04474 const ILLmps_section sec);
04475
04476 extern int dbl_ILLmps_next_line (
04477 dbl_ILLread_mps_state * state);
04478 extern int dbl_ILLmps_next_field (
04479 dbl_ILLread_mps_state * state);
04480 extern int dbl_ILLmps_next_coef (
04481 dbl_ILLread_mps_state * state,
04482 double * coef);
04483 extern int dbl_ILLmps_next_bound (
04484 dbl_ILLread_mps_state * state,
04485 double * coef);
04486 extern void dbl_ILLmps_check_end_of_line (
04487 dbl_ILLread_mps_state * state);
04488 extern void dbl_ILLmps_set_end_of_line (
04489 dbl_ILLread_mps_state * state);
04490
04491 extern int dbl_ILLmps_int_sos_mode (
04492 dbl_ILLread_mps_state * state);
04493
04494 extern const char *dbl_ILLmps_possibly_blank_name (
04495 const char *field,
04496 dbl_ILLread_mps_state * state,
04497 ILLsymboltab * tab);
04498 extern int dbl_ILLmps_empty_key (
04499 dbl_ILLread_mps_state * state);
04500 extern int dbl_ILLmps_empty_field (
04501 dbl_ILLread_mps_state * state);
04502
04503 extern int dbl_ILLmps_error (
04504 dbl_ILLread_mps_state * state,
04505 const char *format,
04506 ...);
04507 extern void dbl_ILLmps_warn (
04508 dbl_ILLread_mps_state * state,
04509 const char *format,
04510 ...);
04511
04512 #endif
04513
04514
04515
04516
04517
04518
04519
04520
04521
04522
04523
04524
04525
04526
04527
04528
04529
04530
04531
04532
04533
04534
04535
04536
04537 #ifndef dbl___SIMPLEX_H
04538 #define dbl___SIMPLEX_H
04539
04540 struct itcnt_t;
04541 typedef struct dbl_param_info
04542 {
04543 int origalgo;
04544 int pphaseI;
04545 int pphaseII;
04546 int dphaseI;
04547 int dphaseII;
04548 int p_strategy;
04549 int d_strategy;
04550 }
04551 dbl_param_info;
04552
04553 typedef struct dbl_iter_info
04554 {
04555 int newphase;
04556 int nextphase;
04557 int nextstep;
04558 int sdisplay;
04559 int itercnt;
04560 int solstatus;
04561 int curtime;
04562 int rounds;
04563 int chkobj;
04564 int nosolve;
04565 int noprog;
04566 int inner;
04567 int algorithm;
04568 int resumeid;
04569 int pricetype;
04570 int n_restart;
04571 int n_pivot_fail;
04572 double prevobj;
04573 double objtol;
04574 dbl_param_info oldinfo;
04575 }
04576 dbl_iter_info;
04577
04578 void dbl_ILLsimplex_init_lpinfo ( dbl_lpinfo * lp),
04579 dbl_ILLsimplex_free_lpinfo ( dbl_lpinfo * lp),
04580 dbl_ILLsimplex_load_lpinfo ( dbl_ILLlpdata * qslp, dbl_lpinfo * lp),
04581 dbl_ILLsimplex_set_bound ( dbl_lpinfo * lp, const double * objbound, int sense);
04582 void dbl_free_internal_lpinfo ( dbl_lpinfo * lp);
04583 void dbl_init_internal_lpinfo ( dbl_lpinfo * lp);
04584 int dbl_build_internal_lpinfo ( dbl_lpinfo * lp);
04585 int dbl_ILLsimplex_retest_psolution ( dbl_lpinfo * lp, dbl_price_info * p, int phase,
04586 dbl_feas_info * fs),
04587 dbl_ILLsimplex_retest_dsolution ( dbl_lpinfo * lp, dbl_price_info * p, int phase,
04588 dbl_feas_info * fs),
04589 dbl_ILLsimplex_solution ( dbl_lpinfo * lp, double * xz, double * piz,
04590 double * dz, double * objval),
04591 dbl_ILLsimplex_infcertificate ( dbl_lpinfo * lp, double * pi),
04592 dbl_ILLsimplex ( dbl_lpinfo * lp, int algorithm, dbl_ILLlp_basis * B,
04593 dbl_price_info * pinf, int *sol_status, int sdisplay, itcnt_t* itcnt),
04594 dbl_ILLsimplex_pivotin ( dbl_lpinfo * lp, dbl_price_info * pinf, int rcnt,
04595 int *rlist, int pivot_opt, int *basis_mod);
04596
04597 #endif
04598
04599
04600
04601
04602
04603
04604
04605
04606
04607
04608
04609
04610
04611
04612
04613
04614
04615
04616
04617
04618
04619
04620
04621 #ifndef dbl_WRITE_LP_STATE_H
04622 #define dbl_WRITE_LP_STATE_H
04623
04624
04625
04626
04627
04628
04629
04630
04631
04632
04633
04634
04635
04636 typedef struct dbl_ILLwrite_lp_state
04637 {
04638 char buf[ILL_namebufsize];
04639 char *p;
04640 int startlen;
04641 int total;
04642 }
04643 dbl_ILLwrite_lp_state;
04644
04645 extern void dbl_ILLwrite_lp_state_init (
04646 dbl_ILLwrite_lp_state * line,
04647 const char *str);
04648 extern void dbl_ILLwrite_lp_state_append (
04649 dbl_ILLwrite_lp_state * line,
04650 const char *str);
04651 extern void dbl_ILLwrite_lp_state_append_coef (
04652 dbl_ILLwrite_lp_state * line,
04653 double v,
04654 int cnt);
04655
04656
04657
04658
04659 extern void dbl_ILLwrite_lp_state_append_number (
04660 dbl_ILLwrite_lp_state * line,
04661 double v);
04662 extern void dbl_ILLwrite_lp_state_save_start (
04663 dbl_ILLwrite_lp_state * line);
04664 extern void dbl_ILLwrite_lp_state_start (
04665 dbl_ILLwrite_lp_state * line);
04666
04667 #endif
04668
04669
04670
04671
04672
04673
04674
04675
04676
04677
04678
04679
04680
04681
04682
04683
04684
04685
04686
04687
04688
04689
04690
04691 #ifndef dbl_ILL_LIB_H
04692 #define dbl_ILL_LIB_H
04693
04694
04695
04696
04697
04698
04699
04700
04701
04702
04703
04704
04705
04706
04707 struct itcnt_t;
04708
04709 int dbl_ILLlib_optimize ( dbl_lpinfo * lp, dbl_ILLlp_basis * B, dbl_price_info * pinf, int algo,
04710 int *status, int simplex_display, struct itcnt_t*itcnt),
04711 dbl_ILLlib_cache_solution ( dbl_lpinfo * lp, dbl_ILLlp_cache * C),
04712 dbl_ILLlib_solution ( dbl_lpinfo * lp, dbl_ILLlp_cache * C, double * val,
04713 double * x, double * pi, double * slack, double * rc),
04714 dbl_ILLlib_get_x ( dbl_lpinfo * lp, dbl_ILLlp_cache * C, double * x),
04715 dbl_ILLlib_get_slack ( dbl_lpinfo * lp, dbl_ILLlp_cache * C, double * slack),
04716 dbl_ILLlib_objval ( dbl_lpinfo * lp, dbl_ILLlp_cache * C, double * val),
04717 dbl_ILLlib_tableau ( dbl_lpinfo * lp, int row, double * binv, double * tabrow),
04718 dbl_ILLlib_basis_order ( dbl_lpinfo * lp, int *header),
04719 dbl_ILLlib_newrow ( dbl_lpinfo * lp, dbl_ILLlp_basis * B,const double rhs, int sense,
04720 const double range, const char *name),
04721 dbl_ILLlib_newrows ( dbl_lpinfo * lp, dbl_ILLlp_basis * B, int num,const double * rhs,
04722 char *sense, const double * range, const char **names),
04723 dbl_ILLlib_addrow ( dbl_lpinfo * lp, dbl_ILLlp_basis * B, int cnt, int *ind,
04724 const double * val, const double rhs, int sense,const double range,
04725 const char *rowname),
04726 dbl_ILLlib_addrows ( dbl_lpinfo * lp, dbl_ILLlp_basis * B, int num, int *rmatcnt,
04727 int *rmatbeg, int *rmatind,const double * rmatval,const double * rhs,
04728 char *sense, const double * range, const char **names, int *nofactor),
04729 dbl_ILLlib_delrows ( dbl_lpinfo * lp, dbl_ILLlp_basis * B, dbl_ILLlp_cache * C, int num,
04730 int *dellist, int *basis_ok, int *cache_ok),
04731 dbl_ILLlib_newcol ( dbl_lpinfo * lp, dbl_ILLlp_basis * B,const double obj,
04732 const double lower,const double upper, const char *name, int factorok),
04733 dbl_ILLlib_newcols ( dbl_lpinfo * lp, dbl_ILLlp_basis * B, int num, double * obj,
04734 double * lower, double * upper, const char **names, int factorok),
04735 dbl_ILLlib_addcol ( dbl_lpinfo * lp, dbl_ILLlp_basis * B, int cnt, int *ind,
04736 double * val,const double obj,const double lower,const double upper,
04737 const char *name, int factorok),
04738 dbl_ILLlib_addcols ( dbl_lpinfo * lp, dbl_ILLlp_basis * B, int num, int *cmatcnt,
04739 int *cmatbeg, int *cmatind, double * cmatval, double * obj,
04740 double * lower, double * upper, const char **names, int factorok),
04741 dbl_ILLlib_delcols ( dbl_lpinfo * lp, dbl_ILLlp_basis * B, int num, int *dellist,
04742 int *basis_ok),
04743 dbl_ILLlib_chgcoef ( dbl_lpinfo * lp, int rowindex, int colindex, double coef),
04744 dbl_ILLlib_getcoef (dbl_lpinfo *lp, int rowindex, int colindex, double* coef),
04745 dbl_ILLlib_chgrange (dbl_lpinfo *lp, int indx, double coef),
04746 dbl_ILLlib_chgsense ( dbl_lpinfo * lp, int num, int *rowlist, char *sense),
04747 dbl_ILLlib_getsenses (dbl_lpinfo *lp, char *senses),
04748 dbl_ILLlib_getrows ( dbl_lpinfo * lp, int num, int *rowlist, int **rowcnt,
04749 int **rowbeg, int **rowind, double ** rowval, double ** rhs,
04750 char **sense, double ** range, char ***names),
04751 dbl_ILLlib_getcols ( dbl_lpinfo * lp, int num, int *collist, int **colcnt,
04752 int **colbeg, int **colind, double ** colval, double ** obj,
04753 double ** lower, double ** upper, char ***names),
04754 dbl_ILLlib_getobj ( dbl_lpinfo * lp, double * obj),
04755 dbl_ILLlib_getobj_list (dbl_lpinfo *lp, int num, int* collist, double* obj),
04756 dbl_ILLlib_chgobj ( dbl_lpinfo * lp, int indx, double coef),
04757 dbl_ILLlib_getrhs ( dbl_lpinfo * lp, double * rhs),
04758 dbl_ILLlib_chgrhs ( dbl_lpinfo * lp, int indx, double coef),
04759 dbl_ILLlib_getintflags ( dbl_lpinfo * lp, int *intflags),
04760 dbl_ILLlib_rownames ( dbl_lpinfo * lp, char **rownames),
04761 dbl_ILLlib_colnames ( dbl_lpinfo * lp, char **colnames),
04762 dbl_ILLlib_colindex ( dbl_lpinfo * lp, const char *name, int *colindex),
04763 dbl_ILLlib_rowindex ( dbl_lpinfo * lp, const char *name, int *rowindex),
04764 dbl_ILLlib_chgbnd ( dbl_lpinfo * lp, int indx, int lu,const double bnd),
04765 dbl_ILLlib_chgbnds ( dbl_lpinfo * lp, int cnt, int *indx, char *lu, const double * bnd),
04766 dbl_ILLlib_getbnd ( dbl_lpinfo * lp, int indx, int lu, double * bnd),
04767 dbl_ILLlib_getbnds ( dbl_lpinfo * lp, double * lower, double * upper),
04768 dbl_ILLlib_getbnds_list ( dbl_lpinfo *lp, int num, int*collist, double *lower,
04769 double *upper),
04770 dbl_ILLlib_strongbranch ( dbl_lpinfo * lp, dbl_price_info * pinf, int *candidatelist,
04771 int ncand, double * xlist, double * downpen, double * uppen,
04772 int iterations, double objbound, struct itcnt_t*itcnt),
04773 dbl_ILLlib_getbasis ( dbl_lpinfo * lp, char *cstat, char *rstat),
04774 dbl_ILLlib_loadbasis ( dbl_ILLlp_basis * B, int nstruct, int nrows, char *cstat,
04775 char *rstat),
04776 dbl_ILLlib_readbasis ( dbl_lpinfo * lp, dbl_ILLlp_basis * B, const char *dbl_fname),
04777 dbl_ILLlib_writebasis ( dbl_lpinfo * lp, dbl_ILLlp_basis * B, const char *dbl_fname),
04778 dbl_ILLlib_getrownorms ( dbl_lpinfo * lp, dbl_price_info * pinf, double * rownorms),
04779 dbl_ILLlib_loadrownorms ( dbl_lpinfo * lp, dbl_price_info * pinf, double * rownorms),
04780 dbl_ILLlib_recompute_rownorms ( dbl_lpinfo * lp, dbl_price_info * pinf),
04781 dbl_ILLlib_iter ( dbl_lpinfo * lp),
04782 dbl_ILLlib_print_x ( EGioFile_t * fd, dbl_lpinfo * lp, dbl_ILLlp_cache * C, double * x,
04783 int nonZerosOnly),
04784 dbl_ILLwrite_lp_file ( dbl_ILLlpdata * lp, EGioFile_t * eout, dbl_qserror_collector * c);
04785
04786
04787 extern int dbl_ILLlib_findName (
04788 dbl_ILLlpdata * qslp,
04789 int forRow,
04790 const char *name,
04791 int id,
04792 char buf[ILL_namebufsize]);
04793
04794
04795
04796
04797
04798
04799
04800 int dbl_ILLpresolve_add_logicals (
04801 dbl_ILLlpdata * lp);
04802
04803
04804
04805
04806
04807
04808
04809
04810 int dbl_ILLmip_binary_dfs (
04811 dbl_lpinfo * lp);
04812
04813 #endif
04814
04815
04816
04817
04818
04819
04820
04821
04822
04823
04824
04825
04826
04827
04828
04829
04830
04831
04832
04833
04834
04835
04836
04837 #ifndef fp20___QS_QSTRUCT_H
04838 #define fp20___QS_QSTRUCT_H
04839
04840 typedef struct fp20_qsdata
04841 {
04842 struct fp20_ILLlpdata *qslp;
04843 struct fp20_lpinfo *lp;
04844 struct fp20_price_info *pricing;
04845 struct fp20_ILLlp_basis *basis;
04846 struct fp20_ILLlp_cache *cache;
04847 char *name;
04848 int qstatus;
04849 int factorok;
04850 int simplex_display;
04851 int simplex_scaling;
04852 itcnt_t itcnt;
04853 EGfp20_t uobjlim;
04854 EGfp20_t lobjlim;
04855 }
04856 fp20_QSdata;
04857
04858 #endif
04859
04860
04861
04862
04863
04864
04865
04866
04867
04868
04869
04870
04871
04872
04873
04874
04875
04876
04877
04878
04879
04880
04881
04882 #ifndef fp20_EDITOR_H
04883 #define fp20_EDITOR_H
04884
04885 extern void fp20_ILLeditor_init (
04886 void);
04887 extern void fp20_ILLeditor (
04888 fp20_QSdata * p);
04889 extern int fp20_ILLeditor_solve (
04890 fp20_QSdata * p,
04891 int salgo);
04892
04893 #endif
04894
04895
04896
04897
04898
04899
04900
04901
04902
04903
04904
04905
04906
04907
04908
04909
04910
04911
04912
04913
04914
04915
04916
04917
04918
04919
04920
04921
04922
04923 #ifndef fp20___SVECTOR_H
04924 #define fp20___SVECTOR_H
04925
04926 typedef struct fp20_svector
04927 {
04928 int nzcnt;
04929 int *indx;
04930 int size;
04931 EGfp20_t *coef;
04932 }
04933 fp20_svector;
04934
04935 void fp20_ILLsvector_init (
04936 fp20_svector * s),
04937 fp20_ILLsvector_free (
04938 fp20_svector * s);
04939
04940 int fp20_ILLsvector_alloc (
04941 fp20_svector * s,
04942 int nzcnt),
04943 fp20_ILLsvector_copy (
04944 const fp20_svector * s_in,
04945 fp20_svector * s_out);
04946
04947 #endif
04948
04949
04950
04951
04952
04953
04954
04955 #ifndef fp20___HEAP_H
04956 #define fp20___HEAP_H
04957
04958 typedef struct
04959 {
04960 int *entry;
04961 int *loc;
04962 EGfp20_t *key;
04963 int hexist;
04964 int maxsize;
04965 int size;
04966 }
04967 fp20_heap;
04968
04969 void fp20_ILLheap_insert (
04970 fp20_heap * const h,
04971 int const ix),
04972 fp20_ILLheap_modify (
04973 fp20_heap * const h,
04974 int const ix),
04975 fp20_ILLheap_delete (
04976 fp20_heap * const h,
04977 int const ix),
04978 fp20_ILLheap_init (
04979 fp20_heap * const h),
04980 fp20_ILLheap_free (
04981 fp20_heap * const h);
04982
04983 int fp20_ILLheap_findmin (
04984 fp20_heap * const h),
04985 fp20_ILLheap_build (
04986 fp20_heap * const h,
04987 int const nelems,
04988 EGfp20_t * key);
04989
04990 #endif
04991
04992
04993
04994
04995
04996
04997
04998 #ifndef fp20___MATRIX_H
04999 #define fp20___MATRIX_H
05000
05001 typedef struct fp20_ILLmatrix
05002 {
05003 EGfp20_t *matval;
05004 int *matcnt;
05005 int *matind;
05006 int *matbeg;
05007 int matcols;
05008 int matrows;
05009 int matcolsize;
05010 int matsize;
05011 int matfree;
05012
05013
05014 }
05015 fp20_ILLmatrix;
05016
05017 void fp20_ILLmatrix_init (
05018 fp20_ILLmatrix * A);
05019 void fp20_ILLmatrix_free (
05020 fp20_ILLmatrix * A);
05021 void fp20_ILLmatrix_prt (
05022 EGioFile_t * fd,
05023 fp20_ILLmatrix * A);
05024
05025 #endif
05026
05027
05028
05029
05030
05031
05032
05033
05034
05035
05036
05037
05038
05039
05040
05041
05042
05043
05044
05045
05046
05047
05048
05049 #ifndef fp20___QS_FACTOR_H_
05050 #define fp20___QS_FACTOR_H_
05051
05052 typedef char fp20_QSbool;
05053
05054 typedef struct fp20_uc_info
05055 {
05056 int cbeg;
05057 int nzcnt;
05058 int next;
05059 int prev;
05060 int delay;
05061 }
05062 fp20_uc_info;
05063
05064 typedef struct fp20_ur_info
05065 {
05066 EGfp20_t max;
05067 int rbeg;
05068 int nzcnt;
05069 int pivcnt;
05070 int next;
05071 int prev;
05072 int delay;
05073 }
05074 fp20_ur_info;
05075
05076 typedef struct fp20_lc_info
05077 {
05078 int cbeg;
05079 int nzcnt;
05080 int c;
05081 int crank;
05082 int delay;
05083 }
05084 fp20_lc_info;
05085
05086 typedef struct fp20_lr_info
05087 {
05088 int rbeg;
05089 int nzcnt;
05090 int r;
05091 int rrank;
05092 int delay;
05093 }
05094 fp20_lr_info;
05095
05096 typedef struct fp20_er_info
05097 {
05098 int rbeg;
05099 int nzcnt;
05100 int r;
05101 }
05102 fp20_er_info;
05103
05104 typedef struct fp20_factor_work
05105 {
05106 int max_k;
05107 EGfp20_t fzero_tol;
05108 EGfp20_t szero_tol;
05109 EGfp20_t partial_tol;
05110 double ur_space_mul;
05111 double uc_space_mul;
05112 double lc_space_mul;
05113 double lr_space_mul;
05114 double er_space_mul;
05115 double grow_mul;
05116 int p;
05117 int etamax;
05118 double minmult;
05119 double maxmult;
05120 double updmaxmult;
05121 double dense_fract;
05122 int dense_min;
05123
05124 EGfp20_t maxelem_orig;
05125 int nzcnt_orig;
05126 EGfp20_t maxelem_factor;
05127 int nzcnt_factor;
05128 EGfp20_t maxelem_cur;
05129 int nzcnt_cur;
05130
05131 EGfp20_t partial_cur;
05132
05133 int dim;
05134 int stage;
05135 int nstages;
05136 int etacnt;
05137 EGfp20_t *work_coef;
05138 int *work_indx;
05139 fp20_uc_info *uc_inf;
05140 fp20_ur_info *ur_inf;
05141 fp20_lc_info *lc_inf;
05142 fp20_lr_info *lr_inf;
05143 fp20_er_info *er_inf;
05144 int *ucindx;
05145 int *ucrind;
05146 EGfp20_t *uccoef;
05147 int *urindx;
05148 int *urcind;
05149 EGfp20_t *urcoef;
05150 int *lcindx;
05151 EGfp20_t *lccoef;
05152 int *lrindx;
05153 EGfp20_t *lrcoef;
05154 int *erindx;
05155 EGfp20_t *ercoef;
05156 int *rperm;
05157 int *rrank;
05158 int *cperm;
05159 int *crank;
05160 fp20_svector xtmp;
05161 int ur_freebeg;
05162 int ur_space;
05163 int uc_freebeg;
05164 int uc_space;
05165 int lc_freebeg;
05166 int lc_space;
05167 int lr_freebeg;
05168 int lr_space;
05169 int er_freebeg;
05170 int er_space;
05171
05172 int *p_nsing;
05173 int **p_singr;
05174 int **p_singc;
05175
05176 EGfp20_t *dmat;
05177 int drows;
05178 int dcols;
05179 int dense_base;
05180 }
05181 fp20_factor_work;
05182
05183 void fp20_ILLfactor_init_factor_work (
05184 fp20_factor_work * f),
05185 fp20_ILLfactor_free_factor_work (
05186 fp20_factor_work * f),
05187 fp20_ILLfactor_ftran (
05188 fp20_factor_work * f,
05189 fp20_svector * a,
05190 fp20_svector * x),
05191 fp20_ILLfactor_ftran_update (
05192 fp20_factor_work * f,
05193 fp20_svector * a,
05194 fp20_svector * upd,
05195 fp20_svector * x),
05196 fp20_ILLfactor_btran (
05197 fp20_factor_work * f,
05198 fp20_svector * a,
05199 fp20_svector * x);
05200
05201 int fp20_ILLfactor_create_factor_work (
05202 fp20_factor_work * f,
05203 int dim),
05204 fp20_ILLfactor_set_factor_iparam (
05205 fp20_factor_work * f,
05206 int param,
05207 int val),
05208 fp20_ILLfactor_set_factor_dparam (
05209 fp20_factor_work * f,
05210 int param,
05211 EGfp20_t val),
05212 fp20_ILLfactor (
05213 fp20_factor_work * f,
05214 int *basis,
05215 int *cbeg,
05216 int *clen,
05217 int *cindx,
05218 EGfp20_t * ccoef,
05219 int *p_nsing,
05220 int **p_singr,
05221 int **p_singc),
05222 fp20_ILLfactor_update (
05223 fp20_factor_work * f,
05224 fp20_svector * a,
05225 int col,
05226 int *p_refact);
05227
05228 #endif
05229
05230
05231
05232
05233
05234
05235
05236
05237
05238
05239
05240
05241
05242
05243
05244
05245
05246
05247
05248
05249
05250
05251
05252 #ifndef fp20___QS_LPDEFS_H
05253 #define fp20___QS_LPDEFS_H
05254
05255
05256
05257 #define fp20_INFTY fp20_ILL_MAXDOUBLE
05258 #define fp20_NINFTY fp20_ILL_MINDOUBLE
05259
05260
05261
05262
05263 extern EGfp20_t fp20_PARAM_IBASIS_RPIVOT;
05264 extern EGfp20_t fp20_PARAM_IBASIS_RTRIANG;
05265 extern EGfp20_t fp20_PARAM_MIN_DNORM;
05266 extern EGfp20_t fp20_PFEAS_TOLER;
05267 extern EGfp20_t fp20_BD_TOLER;
05268 extern EGfp20_t fp20_DFEAS_TOLER;
05269 extern EGfp20_t fp20_PIVOT_TOLER;
05270 extern EGfp20_t fp20_SZERO_TOLER;
05271 extern EGfp20_t fp20_PIVZ_TOLER;
05272 extern EGfp20_t fp20_OBJBND_TOLER;
05273 extern EGfp20_t fp20_DBNDPIV_TOLER;
05274 extern EGfp20_t fp20_DBNDPIV_RATIO;
05275 extern EGfp20_t fp20_ALTPIV_TOLER;
05276
05277 extern EGfp20_t fp20_PROGRESS_ZERO;
05278 extern EGfp20_t fp20_PROGRESS_THRESH;
05279 extern EGfp20_t fp20_CB_EPS;
05280 extern EGfp20_t fp20_CB_INF_RATIO;
05281 extern EGfp20_t fp20_CB_PRI_RLIMIT;
05282
05283
05284 typedef struct
05285 {
05286 int ynz_cnt;
05287 int num_y;
05288 EGfp20_t y_ravg;
05289 int znz_cnt;
05290 int num_z;
05291 EGfp20_t z_ravg;
05292 int zanz_cnt;
05293 int num_za;
05294 EGfp20_t za_ravg;
05295 int pnorm_cnt;
05296 int dnorm_cnt;
05297 int pinz_cnt;
05298 int num_pi;
05299 int pi1nz_cnt;
05300 int num_pi1;
05301 int upnz_cnt;
05302 int num_up;
05303 int pupv_cnt;
05304 int dupv_cnt;
05305
05306 int start_slacks;
05307 int final_slacks;
05308 int start_art;
05309 int final_art;
05310
05311 int pI_iter;
05312 int pII_iter;
05313 int dI_iter;
05314 int dII_iter;
05315 int tot_iter;
05316
05317 int pivpI[10];
05318 int pivpII[10];
05319 int pivdI[10];
05320 int pivdII[10];
05321 }
05322 fp20_count_struct;
05323
05324
05325 typedef struct
05326 {
05327 EGfp20_t pfeas_tol;
05328 EGfp20_t dfeas_tol;
05329 EGfp20_t pivot_tol;
05330 EGfp20_t szero_tol;
05331 EGfp20_t ip_tol;
05332 EGfp20_t id_tol;
05333 }
05334 fp20_tol_struct;
05335
05336
05337 typedef struct fp20_bndinfo
05338 {
05339 EGfp20_t pbound;
05340 EGfp20_t cbound;
05341 int btype;
05342 int varnum;
05343 struct fp20_bndinfo *next;
05344 }
05345 fp20_bndinfo;
05346
05347
05348 typedef struct fp20_coefinfo
05349 {
05350 EGfp20_t pcoef;
05351 EGfp20_t ccoef;
05352 int varnum;
05353 struct fp20_coefinfo *next;
05354 }
05355 fp20_coefinfo;
05356
05357
05358 typedef struct fp20_feas_info
05359 {
05360 int pstatus;
05361 int dstatus;
05362 EGfp20_t totinfeas;
05363 }
05364 fp20_feas_info;
05365
05366 typedef struct fp20_lp_status_info
05367 {
05368 char optimal;
05369 char primal_feasible;
05370 char primal_infeasible;
05371 char primal_unbounded;
05372 char dual_feasible;
05373 char dual_infeasible;
05374 char dual_unbounded;
05375 char padd;
05376 }
05377 fp20_lp_status_info;
05378
05379 typedef struct fp20_pI_uinfo
05380 {
05381 int tctr;
05382 int i;
05383 int *perm;
05384 int *ix;
05385 int fs;
05386 EGfp20_t piv;
05387 EGfp20_t *t;
05388 EGfp20_t dty;
05389 EGfp20_t c_obj;
05390 EGfp20_t tz;
05391 }
05392 fp20_pI_uinfo;
05393
05394 extern void fp20_ILLlp_status_info_init (
05395 fp20_lp_status_info * ls);
05396
05397
05398
05399
05400
05401
05402 typedef struct fp20_lpinfo
05403 {
05404
05405 EGfp20_t objval;
05406 EGfp20_t pobjval;
05407 EGfp20_t dobjval;
05408 EGfp20_t pinfeas;
05409 EGfp20_t dinfeas;
05410 EGfp20_t objbound;
05411 fp20_lp_status_info probstat;
05412 fp20_lp_status_info basisstat;
05413 int nrows;
05414 int ncols;
05415 int *matcnt;
05416 int *matbeg;
05417 int *matind;
05418 EGfp20_t *matval;
05419 int matfree;
05420 int matsize;
05421 EGfp20_t *bz;
05422 EGfp20_t *lz;
05423 EGfp20_t *uz;
05424 EGfp20_t *cz;
05425 int localrows;
05426 int *rowcnt;
05427 int *rowbeg;
05428 int *rowind;
05429 EGfp20_t *rowval;
05430
05431 EGfp20_t *xbz;
05432 EGfp20_t *piz;
05433 EGfp20_t *dz;
05434 EGfp20_t *pIxbz;
05435 EGfp20_t *pIpiz;
05436 EGfp20_t *pIdz;
05437
05438 int final_phase;
05439 int infub_ix;
05440
05441 int basisid;
05442 int nnbasic;
05443 int *baz;
05444 int *nbaz;
05445 int *vstat;
05446 int *vindex;
05447 int fbasisid;
05448 fp20_factor_work *f;
05449 int *vtype;
05450 char *vclass;
05451
05452 fp20_svector zz;
05453 fp20_svector yjz;
05454 fp20_svector zA;
05455 fp20_svector work;
05456 fp20_svector srhs;
05457 fp20_svector ssoln;
05458 int *iwork;
05459 fp20_pI_uinfo upd;
05460 int *bfeas;
05461 int *dfeas;
05462
05463 fp20_tol_struct *tol;
05464 fp20_count_struct *cnts;
05465 int nbchange;
05466 int ncchange;
05467 fp20_bndinfo *bchanges;
05468 fp20_coefinfo *cchanges;
05469 int pIratio;
05470 int pIIratio;
05471 int dIratio;
05472 int dIIratio;
05473
05474 int maxiter;
05475 int iterskip;
05476 double maxtime;
05477 double starttime;
05478 struct fp20_ILLlpdata *O;
05479 ILLrandstate rstate;
05480
05481 }
05482 fp20_lpinfo;
05483
05484
05485 typedef struct
05486 {
05487 int ninit;
05488 EGfp20_t *norms;
05489 int *refframe;
05490 }
05491 fp20_p_devex_info;
05492
05493 typedef struct
05494 {
05495 EGfp20_t *norms;
05496 }
05497 fp20_p_steep_info;
05498
05499 typedef struct
05500 {
05501 int k;
05502 int cgroup;
05503 int ngroups;
05504 int *gstart;
05505 int *gshift;
05506 int *gsize;
05507 int bsize;
05508 int *bucket;
05509 int *perm;
05510 EGfp20_t *infeas;
05511 }
05512 fp20_mpart_info;
05513
05514 typedef struct
05515 {
05516 int ninit;
05517 EGfp20_t *norms;
05518 int *refframe;
05519 }
05520 fp20_d_devex_info;
05521
05522 typedef struct
05523 {
05524 EGfp20_t *norms;
05525 }
05526 fp20_d_steep_info;
05527
05528
05529 typedef struct fp20_price_info
05530 {
05531 int p_strategy;
05532 int d_strategy;
05533 int pI_price;
05534 int pII_price;
05535 int dI_price;
05536 int dII_price;
05537 int cur_price;
05538 EGfp20_t *p_scaleinf;
05539 EGfp20_t *d_scaleinf;
05540 fp20_p_devex_info pdinfo;
05541 fp20_p_steep_info psinfo;
05542 fp20_mpart_info pmpinfo;
05543 fp20_d_devex_info ddinfo;
05544 fp20_d_steep_info dsinfo;
05545 fp20_mpart_info dmpinfo;
05546 fp20_heap h;
05547 EGfp20_t htrigger;
05548 int hineff;
05549 char init;
05550 }
05551 fp20_price_info;
05552
05553 #endif
05554
05555
05556
05557
05558
05559
05560
05561
05562
05563
05564
05565
05566
05567
05568
05569
05570
05571
05572
05573
05574
05575
05576
05577 #ifndef fp20_LINE_READER_FILE_H
05578 #define fp20_LINE_READER_FILE_H
05579
05580
05581
05582 typedef char *(
05583 *fp20_qsread_line_fct) (
05584 char *s,
05585 int size,
05586 void *src);
05587
05588 typedef struct fp20_qsline_reader
05589 {
05590 fp20_qsread_line_fct read_line_fct;
05591 void *data_src;
05592 struct fp20_qserror_collector *error_collector;
05593 }
05594 fp20_qsline_reader;
05595
05596 fp20_qsline_reader *fp20_ILLline_reader_new (
05597 fp20_qsread_line_fct fct,
05598 void *data_src);
05599 void fp20_ILLline_reader_free (
05600 fp20_qsline_reader * reader);
05601
05602 #define fp20_ILLline_reader_get(s, size, reader) \
05603 (reader)->read_line_fct(s, size, (reader)->data_src)
05604
05605
05606
05607
05608
05609
05610
05611
05612
05613
05614
05615 #endif
05616
05617
05618
05619
05620
05621
05622
05623
05624
05625
05626
05627
05628
05629
05630
05631
05632
05633
05634
05635
05636
05637
05638
05639 #ifndef fp20_ILL_LPDATA_H
05640 #define fp20_ILL_LPDATA_H
05641
05642
05643 extern EGfp20_t fp20_ILL_MAXDOUBLE;
05644 extern EGfp20_t fp20_ILL_MINDOUBLE;
05645
05646 #define fp20_ILL_MAXINT (2147483647)
05647 #define fp20_ILL_MIN (1)
05648 #define fp20_ILL_MAX (-1)
05649
05650
05651
05652 #define fp20_ILL_PRE_SCALE 1
05653 #define fp20_ILL_PRE_FIXED 2
05654 #define fp20_ILL_PRE_SINGLE_ROW 4
05655 #define fp20_ILL_PRE_FORCING 8
05656 #define fp20_ILL_PRE_SINGLE_COL 16
05657 #define fp20_ILL_PRE_DUPLICATE_ROW 32
05658 #define fp20_ILL_PRE_DUPLICATE_COL 64
05659 #define fp20_ILL_PRE_EMPTY_COL 128
05660 #define fp20_ILL_PRE_ALL (fp20_ILL_PRE_SCALE | fp20_ILL_PRE_FIXED | fp20_ILL_PRE_SINGLE_ROW \
05661 fp20_ILL_PRE_FORCING | fp20_ILL_PRE_SINGLE_COL | fp20_ILL_PRE_DUPLICATE_ROW \
05662 fp20_ILL_PRE_DUPLICATE_COL | fp20_ILL_PRE_EMPTY_COL)
05663 #define fp20_ILL_PRE_SIMPLE (fp20_ILL_PRE_FIXED | fp20_ILL_PRE_EMPTY_COL)
05664
05665 typedef struct fp20_ILLlpdata
05666 {
05667 int nrows;
05668 int ncols;
05669 int nstruct;
05670 int nzcount;
05671 int rowsize;
05672 int colsize;
05673 int structsize;
05674
05675 int objsense;
05676 char *sense;
05677 EGfp20_t *obj;
05678 EGfp20_t *rhs;
05679 EGfp20_t *rangeval;
05680 EGfp20_t *lower;
05681 EGfp20_t *upper;
05682 fp20_ILLmatrix A;
05683 struct fp20_ILLlp_rows *rA;
05684
05685 char **rownames;
05686 ILLsymboltab rowtab;
05687 char *objname;
05688
05689
05690 char **colnames;
05691 ILLsymboltab coltab;
05692
05693 char *probname;
05694 char *intmarker;
05695 int *structmap;
05696 int *rowmap;
05697 struct fp20_ILLlp_basis *basis;
05698 struct fp20_ILLlp_predata *presolve;
05699 struct fp20_ILLlp_sinfo *sinfo;
05700
05701
05702
05703
05704 fp20_ILLmatrix sos;
05705
05706
05707
05708 char *sos_type;
05709 int *is_sos_mem;
05710
05711
05712
05713 char *refrowname;
05714 int refind;
05715
05716
05717
05718
05719
05720
05721
05722
05723 qsstring_reporter reporter;
05724
05725 }
05726 fp20_ILLlpdata;
05727
05728 typedef struct fp20_ILLlp_basis
05729 {
05730 int nstruct;
05731 int nrows;
05732 int rownorms_size;
05733 int colnorms_size;
05734 char *cstat;
05735 char *rstat;
05736 EGfp20_t *rownorms;
05737 EGfp20_t *colnorms;
05738 }
05739 fp20_ILLlp_basis;
05740
05741 typedef struct fp20_ILLlp_cache
05742 {
05743 int nstruct;
05744 int nrows;
05745 int status;
05746 EGfp20_t val;
05747 EGfp20_t *x;
05748 EGfp20_t *pi;
05749 EGfp20_t *rc;
05750 EGfp20_t *slack;
05751 }
05752 fp20_ILLlp_cache;
05753
05754 typedef struct fp20_ILLlp_sinfo
05755 {
05756 int ncols;
05757 int nrows;
05758 int nzcount;
05759 int rowsize;
05760 int colsize;
05761 int objsense;
05762
05763 EGfp20_t *obj;
05764 EGfp20_t *rhs;
05765 EGfp20_t *lower;
05766 EGfp20_t *upper;
05767
05768 fp20_ILLmatrix A;
05769
05770 char **colnames;
05771 }
05772 fp20_ILLlp_sinfo;
05773
05774 typedef struct fp20_ILLlp_preline
05775 {
05776 EGfp20_t rhs;
05777 EGfp20_t obj;
05778 EGfp20_t lower;
05779 EGfp20_t upper;
05780 int count;
05781 int *ind;
05782 int row_or_col;
05783 EGfp20_t *val;
05784 }
05785 fp20_ILLlp_preline;
05786
05787 typedef struct fp20_ILLlp_preop
05788 {
05789 int ptype;
05790 int rowindex;
05791 int colindex;
05792 fp20_ILLlp_preline line;
05793 }
05794 fp20_ILLlp_preop;
05795
05796 typedef struct fp20_ILLlp_predata
05797 {
05798 int opcount;
05799 int opsize;
05800 fp20_ILLlp_preop *oplist;
05801 int r_nrows;
05802 int r_ncols;
05803 int *colmap;
05804 int *rowmap;
05805 EGfp20_t *rowscale;
05806 EGfp20_t *colscale;
05807 EGfp20_t *colfixval;
05808 EGfp20_t *rowfixval;
05809 }
05810 fp20_ILLlp_predata;
05811
05812 typedef struct fp20_ILLlp_rows
05813 {
05814 int *rowbeg;
05815 int *rowcnt;
05816 int *rowind;
05817 EGfp20_t *rowval;
05818 }
05819 fp20_ILLlp_rows;
05820
05821
05822
05823
05824
05825
05826
05827
05828 struct fp20_qsdata *fp20_ILLread (
05829 fp20_qsline_reader * file,
05830 const char *fp20_fname,
05831 int isMps);
05832 void fp20_ILLstart (
05833 void);
05834
05835
05836
05837 void fp20_ILLend (
05838 void);
05839
05840
05841 void fp20_ILLchange_precision (
05842 void);
05843
05844
05845
05846
05847 void fp20_ILLlpdata_init (
05848 fp20_ILLlpdata * lp);
05849 void fp20_ILLlpdata_free (
05850 fp20_ILLlpdata * lp);
05851 void fp20_ILLlp_basis_init (
05852 fp20_ILLlp_basis * B);
05853 void fp20_ILLlp_basis_free (
05854 fp20_ILLlp_basis * B);
05855 void fp20_ILLlp_cache_init (
05856 fp20_ILLlp_cache * C);
05857 void fp20_ILLlp_cache_free (
05858 fp20_ILLlp_cache * C);
05859 int fp20_ILLlp_basis_alloc (
05860 fp20_ILLlp_basis * B,
05861 int ncols,
05862 int nrows);
05863 int fp20_ILLlp_cache_alloc (
05864 fp20_ILLlp_cache * C,
05865 int ncols,
05866 int nrows);
05867
05868 int fp20_ILLlp_rows_init (
05869 fp20_ILLlp_rows * lp_rows,
05870 fp20_ILLlpdata * lp,
05871 int include_logicals);
05872 void fp20_ILLlp_rows_clear (
05873 fp20_ILLlp_rows * lp_rows);
05874 int fp20_ILLprint_report (
05875 fp20_ILLlpdata * lp,
05876 const char *format,
05877 ...);
05878
05879
05880
05881
05882
05883
05884
05885
05886
05887 void fp20_ILLlp_sinfo_init (
05888 fp20_ILLlp_sinfo * sinfo),
05889 fp20_ILLlp_sinfo_free (
05890 fp20_ILLlp_sinfo * sinfo),
05891 fp20_ILLlp_predata_init (
05892 fp20_ILLlp_predata * pre),
05893 fp20_ILLlp_predata_free (
05894 fp20_ILLlp_predata * pre);
05895
05896 int fp20_ILLlp_add_logicals (
05897 fp20_ILLlpdata * lp),
05898 fp20_ILLlp_scale (
05899 fp20_ILLlpdata * lp),
05900 fp20_ILLlp_presolve (
05901 fp20_ILLlpdata * lp,
05902 int pre_types);
05903
05904
05905
05906
05907
05908 extern int fp20___QSEX_SETUP;
05909
05910 #endif
05911
05912
05913
05914
05915
05916
05917
05918
05919
05920
05921
05922
05923
05924
05925
05926
05927
05928
05929
05930
05931
05932
05933
05934 #ifndef fp20___BASIS_H
05935 #define fp20___BASIS_H
05936
05937
05938 #if 0
05939 #if EGLPNUM_TYPE != DBL_TYPE && EGLPNUM_TYPE != LDBL_TYPE
05940 extern EGfp20_t fp20_CB_PRI_RLIMIT;
05941 extern EGfp20_t fp20_CB_INF_RATIO;
05942 extern EGfp20_t fp20_CB_EPS;
05943 #endif
05944 #endif
05945
05946 typedef struct fp20_var_data
05947 {
05948 int nartif;
05949 int nslacks;
05950 int nfree;
05951 int nbndone;
05952 int nbounded;
05953 int nfixed;
05954 EGfp20_t cmax;
05955 }
05956 fp20_var_data;
05957
05958 void fp20_ILLbasis_init_vardata (
05959 fp20_var_data * vd);
05960 void fp20_ILLbasis_clear_vardata (
05961 fp20_var_data * vd);
05962
05963 int fp20_ILLbasis_build_basisinfo (
05964 fp20_lpinfo * lp),
05965 fp20_ILLbasis_get_initial (
05966 fp20_lpinfo * lp,
05967 int algorithm),
05968 fp20_ILLbasis_get_cinitial (
05969 fp20_lpinfo * lp,
05970 int algorithm),
05971 fp20_ILLbasis_load (
05972 fp20_lpinfo * lp,
05973 fp20_ILLlp_basis * B),
05974 fp20_ILLbasis_tableau_row (
05975 fp20_lpinfo * lp,
05976 int row,
05977 EGfp20_t * brow,
05978 EGfp20_t * trow,
05979 EGfp20_t * rhs,
05980 int strict),
05981 fp20_ILLbasis_factor (
05982 fp20_lpinfo * lp,
05983 int *singular),
05984 fp20_ILLbasis_refactor (
05985 fp20_lpinfo * lp),
05986 fp20_ILLbasis_update (
05987 fp20_lpinfo * lp,
05988 fp20_svector * y,
05989 int lindex,
05990 int *refactor,
05991 int *singular);
05992
05993 void fp20_ILLbasis_column_solve (
05994 fp20_lpinfo * lp,
05995 fp20_svector * rhs,
05996 fp20_svector * soln),
05997 fp20_ILLbasis_column_solve_update (
05998 fp20_lpinfo * lp,
05999 fp20_svector * rhs,
06000 fp20_svector * upd,
06001 fp20_svector * soln),
06002 fp20_ILLbasis_row_solve (
06003 fp20_lpinfo * lp,
06004 fp20_svector * rhs,
06005 fp20_svector * soln),
06006 fp20_ILLbasis_free_basisinfo (
06007 fp20_lpinfo * lp),
06008 fp20_ILLbasis_free_fbasisinfo (
06009 fp20_lpinfo * lp),
06010 fp20_ILLbasis_init_basisinfo (
06011 fp20_lpinfo * lp);
06012
06013 #endif
06014
06015
06016
06017
06018
06019
06020
06021
06022
06023
06024
06025
06026
06027
06028
06029
06030
06031
06032
06033
06034
06035
06036 #ifndef fp20___DHEAPS_I_H__
06037 #define fp20___DHEAPS_I_H__
06038
06039
06040
06041
06042
06043
06044 typedef struct fp20_ILLdheap
06045 {
06046 EGfp20_t *key;
06047 int *entry;
06048 int *loc;
06049 int total_space;
06050 int size;
06051 }
06052 fp20_ILLdheap;
06053
06054 void fp20_ILLutil_dheap_free (
06055 fp20_ILLdheap * h),
06056 fp20_ILLutil_dheap_delete (
06057 fp20_ILLdheap * h,
06058 int i),
06059 fp20_ILLutil_dheap_changekey (
06060 fp20_ILLdheap * h,
06061 int i,
06062 EGfp20_t * newkey),
06063 fp20_ILLutil_dheap_findmin (
06064 fp20_ILLdheap * h,
06065 int *i),
06066 fp20_ILLutil_dheap_deletemin (
06067 fp20_ILLdheap * h,
06068 int *i);
06069
06070 int fp20_ILLutil_dheap_init (
06071 fp20_ILLdheap * h,
06072 int k),
06073 fp20_ILLutil_dheap_resize (
06074 fp20_ILLdheap * h,
06075 int newsize),
06076 fp20_ILLutil_dheap_insert (
06077 fp20_ILLdheap * h,
06078 int i);
06079
06080
06081
06082 #endif
06083
06084
06085
06086
06087
06088
06089
06090
06091
06092
06093
06094
06095
06096
06097
06098
06099
06100
06101
06102
06103
06104
06105
06106 #ifndef fp20___QS_QSOPT_H
06107 #define fp20___QS_QSOPT_H
06108
06109
06110 #ifdef WIN32
06111
06112 #ifdef QSLIB_EXPORTS
06113 #define fp20_QSLIB_INTERFACE __declspec(dllexport)
06114 #else
06115 #define fp20_QSLIB_INTERFACE __declspec(dllimport)
06116 #endif
06117
06118 #else
06119 #define fp20_QSLIB_INTERFACE extern
06120 #endif
06121
06122 #ifdef WIN32
06123 typedef struct fp20_QSLIB_INTERFACE fp20_qsdata *fp20_QSprob;
06124 typedef struct fp20_QSLIB_INTERFACE qsbasis *fp20_QSbas;
06125 #else
06126 typedef struct fp20_qsdata *fp20_QSprob;
06127 typedef struct qsbasis *fp20_QSbas;
06128 #endif
06129
06130
06131
06132
06133
06134
06135
06136
06137
06138
06139
06140
06141
06142
06143
06144
06145
06146
06147
06148
06149 #ifdef __cplusplus
06150 extern "C"
06151 {
06152 #endif
06153
06154 #ifdef WIN32
06155
06156
06157
06158
06159 fp20_QSLIB_INTERFACE int fp20_solver_main ( int argc, char **argv);
06160 fp20_QSLIB_INTERFACE int fp20_reader_main ( int argc, char **argv);
06161 #endif
06162
06163 fp20_QSLIB_INTERFACE void fp20_QSfree ( void *ptr),
06164 fp20_QSfree_prob ( fp20_QSprob p),
06165 fp20_QSfree_basis ( fp20_QSbas B),
06166 fp20_QSset_precision ( const unsigned prec),
06167
06168
06169 fp20_QSstart ( void),
06170
06171
06172 fp20_QSend ( void);
06173
06174
06175 fp20_QSLIB_INTERFACE int fp20_QSopt_primal ( fp20_QSprob p, int *status),
06176 fp20_QSopt_dual ( fp20_QSprob p, int *status),
06177 fp20_QSopt_pivotin_col ( fp20_QSprob p, int ccnt, int *clist),
06178 fp20_QSopt_pivotin_row ( fp20_QSprob p, int rcnt, int *rlist),
06179 fp20_QSopt_strongbranch ( fp20_QSprob p, int ncand, int *candidatelist,
06180 EGfp20_t * xlist, EGfp20_t * down_vals, EGfp20_t * up_vals,
06181 int iterations, EGfp20_t objbound),
06182 fp20_QSchange_objsense ( fp20_QSprob p, int newsense),
06183 fp20_QSget_objsense ( fp20_QSprob p, int *newsense),
06184 fp20_QSnew_col ( fp20_QSprob p,const EGfp20_t obj,const EGfp20_t lower,const EGfp20_t upper,
06185 const char *name),
06186 fp20_QSadd_cols ( fp20_QSprob p, int num, int *cmatcnt, int *cmatbeg, int *cmatind,
06187 EGfp20_t * cmatval, EGfp20_t * obj, EGfp20_t * lower,
06188 EGfp20_t * upper, const char **names),
06189 fp20_QSadd_col ( fp20_QSprob p, int cnt, int *cmatind, EGfp20_t * cmatval,
06190 EGfp20_t obj, EGfp20_t lower, EGfp20_t upper, const char *name),
06191 fp20_QSnew_row ( fp20_QSprob p,const EGfp20_t rhs, int sense, const char *name),
06192 fp20_QSadd_ranged_rows ( fp20_QSprob p, int num, int *rmatcnt, int *rmatbeg,
06193 int *rmatind,const EGfp20_t * rmatval,const EGfp20_t * rhs, char *sense,
06194 const EGfp20_t* range, const char **names),
06195 fp20_QSadd_ranged_row ( fp20_QSprob p, int cnt, int *rmatind,const EGfp20_t * rmatval,
06196 const EGfp20_t * rhs, int sense,const EGfp20_t * range, const char *name),
06197 fp20_QSadd_rows ( fp20_QSprob p, int num, int *rmatcnt, int *rmatbeg, int *rmatind,
06198 const EGfp20_t * rmatval,const EGfp20_t * rhs, char *sense, const char **names),
06199 fp20_QSadd_row ( fp20_QSprob p, int cnt, int *rmatind,const EGfp20_t * rmatval,
06200 const EGfp20_t * rhs, int sense, const char *name),
06201 fp20_QSdelete_rows ( fp20_QSprob p, int num, int *dellist),
06202 fp20_QSdelete_row ( fp20_QSprob p, int rowindex),
06203 fp20_QSdelete_setrows ( fp20_QSprob p, int *flags),
06204 fp20_QSdelete_named_row ( fp20_QSprob p, const char *rowname),
06205 fp20_QSdelete_named_rows_list ( fp20_QSprob p, int num, const char **rownames),
06206 fp20_QSdelete_cols ( fp20_QSprob p, int num, int *dellist),
06207 fp20_QSdelete_col ( fp20_QSprob p, int colindex),
06208 fp20_QSdelete_setcols ( fp20_QSprob p, int *flags),
06209 fp20_QSdelete_named_column ( fp20_QSprob p, const char *colname),
06210 fp20_QSdelete_named_columns_list ( fp20_QSprob p, int num, const char **colnames),
06211 fp20_QSchange_senses ( fp20_QSprob p, int num, int *rowlist, char *sense),
06212 fp20_QSchange_sense ( fp20_QSprob p, int rowindex, int sense),
06213 fp20_QSchange_coef ( fp20_QSprob p, int rowindex, int colindex, EGfp20_t coef),
06214 fp20_QSchange_objcoef ( fp20_QSprob p, int indx, EGfp20_t coef),
06215 fp20_QSchange_rhscoef ( fp20_QSprob p, int indx, EGfp20_t coef),
06216 fp20_QSchange_range(fp20_QSprob p, int rowindex, EGfp20_t range),
06217 fp20_QSchange_bounds ( fp20_QSprob p, int num, int *collist, char *lu,
06218 const EGfp20_t * bounds),
06219 fp20_QSchange_bound ( fp20_QSprob p, int indx, int lu,const EGfp20_t bound),
06220 fp20_QSload_basis ( fp20_QSprob p, fp20_QSbas B),
06221 fp20_QSread_and_load_basis ( fp20_QSprob p, const char *filename),
06222 fp20_QSload_basis_array ( fp20_QSprob p, char *cstat, char *rstat),
06223 fp20_QSload_basis_and_row_norms_array ( fp20_QSprob p, char *cstat, char *rstat,
06224 EGfp20_t * rownorms),
06225 fp20_QSget_basis_array ( fp20_QSprob p, char *cstat, char *rstat),
06226 fp20_QSget_basis_and_row_norms_array ( fp20_QSprob p, char *cstat, char *rstat,
06227 EGfp20_t * rownorms),
06228 fp20_QSget_binv_row ( fp20_QSprob p, int indx, EGfp20_t * binvrow),
06229 fp20_QSget_tableau_row ( fp20_QSprob p, int indx, EGfp20_t * tableaurow),
06230 fp20_QSget_basis_order ( fp20_QSprob p, int *basorder),
06231 fp20_QSget_coef (fp20_QSprob p, int rowindex, int colindex, EGfp20_t*coef),
06232 fp20_QSget_status ( fp20_QSprob p, int *status),
06233 fp20_QSget_solution ( fp20_QSprob p, EGfp20_t * value, EGfp20_t * x,
06234 EGfp20_t * pi, EGfp20_t * slack, EGfp20_t * rc),
06235 fp20_QSget_objval ( fp20_QSprob p, EGfp20_t * value),
06236 fp20_QSget_pi_array ( fp20_QSprob p, EGfp20_t * pi),
06237 fp20_QSget_rc_array ( fp20_QSprob p, EGfp20_t * rc),
06238 fp20_QSget_x_array ( fp20_QSprob p, EGfp20_t * x),
06239 fp20_QSget_slack_array ( fp20_QSprob p, EGfp20_t * slack),
06240 fp20_QSget_infeas_array ( fp20_QSprob p, EGfp20_t * pi),
06241 fp20_QSget_colcount ( fp20_QSprob p),
06242 fp20_QSget_rowcount ( fp20_QSprob p),
06243 fp20_QSget_nzcount ( fp20_QSprob p),
06244 fp20_QSget_obj_list(fp20_QSprob p, int num, int*collist, EGfp20_t*obj),
06245 fp20_QSget_obj ( fp20_QSprob p, EGfp20_t * obj),
06246 fp20_QSget_rhs ( fp20_QSprob p, EGfp20_t * rhs),
06247 fp20_QSget_ranged_rows_list ( fp20_QSprob p, int num, int *rowlist, int **rowcnt,
06248 int **rowbeg, int **rowind, EGfp20_t ** rowval, EGfp20_t ** rhs,
06249 char **sense, EGfp20_t **range, char ***names),
06250 fp20_QSget_ranged_rows ( fp20_QSprob p, int **rowcnt, int **rowbeg, int **rowind,
06251 EGfp20_t ** rowval, EGfp20_t ** rhs, char **sense,
06252 EGfp20_t ** range, char ***names),
06253 fp20_QSget_senses ( fp20_QSprob p, char*senses),
06254 fp20_QSget_rows_list ( fp20_QSprob p, int num, int *rowlist, int **rowcnt,
06255 int **rowbeg, int **rowind, EGfp20_t ** rowval, EGfp20_t ** rhs,
06256 char **sense, char ***names),
06257 fp20_QSget_rows ( fp20_QSprob p, int **rowcnt, int **rowbeg, int **rowind,
06258 EGfp20_t ** rowval, EGfp20_t ** rhs, char **sense, char ***names),
06259 fp20_QSget_columns_list ( fp20_QSprob p, int num, int *collist, int **colcnt,
06260 int **colbeg, int **colind, EGfp20_t ** colval, EGfp20_t ** obj,
06261 EGfp20_t ** lower, EGfp20_t ** upper, char ***names),
06262 fp20_QSget_columns ( fp20_QSprob p, int **colcnt, int **colbeg, int **colind,
06263 EGfp20_t ** colval, EGfp20_t ** obj, EGfp20_t ** lower,
06264 EGfp20_t ** upper, char ***names),
06265 fp20_QSget_rownames ( fp20_QSprob p, char **rownames),
06266 fp20_QSget_colnames ( fp20_QSprob p, char **colnames),
06267 fp20_QSget_bound ( fp20_QSprob p, int colindex, int lu, EGfp20_t * bound),
06268 fp20_QSget_bounds ( fp20_QSprob p, EGfp20_t * lower, EGfp20_t * upper),
06269 fp20_QSget_bounds_list(fp20_QSprob p, int num, int*collist, EGfp20_t*lb,
06270 EGfp20_t*ub),
06271 fp20_QSget_intflags ( fp20_QSprob p, int *intflags),
06272 fp20_QSget_intcount ( fp20_QSprob p, int *count),
06273 fp20_QSget_column_index ( fp20_QSprob p, const char *name, int *colindex),
06274 fp20_QSget_row_index ( fp20_QSprob p, const char *name, int *rowindex),
06275 fp20_QSget_named_x ( fp20_QSprob p, const char *colname, EGfp20_t * val),
06276 fp20_QSget_named_rc ( fp20_QSprob p, const char *colname, EGfp20_t * val),
06277 fp20_QSget_named_pi ( fp20_QSprob p, const char *rowname, EGfp20_t * val),
06278 fp20_QSget_named_slack ( fp20_QSprob p, const char *rowname, EGfp20_t * val),
06279 fp20_QScompute_row_norms ( fp20_QSprob p),
06280 fp20_QSwrite_prob ( fp20_QSprob p, const char *filename, const char *filetype),
06281 fp20_QSwrite_prob_file ( fp20_QSprob p, FILE * file, const char *filetype),
06282 fp20_QSwrite_basis ( fp20_QSprob p, fp20_QSbas B, const char *filename),
06283 fp20_QStest_row_norms ( fp20_QSprob p),
06284 fp20_QSget_itcnt(fp20_QSprob p, int *pI_iter, int *pII_iter, int *dI_iter,
06285 int *dII_iter, int *tot_iter),
06286 fp20_QSset_param ( fp20_QSprob p, int whichparam, int newvalue),
06287 fp20_QSset_param_EGlpNum ( fp20_QSprob p, int whichparam, EGfp20_t newvalue),
06288 fp20_QSget_param ( fp20_QSprob p, int whichparam, int *value),
06289 fp20_QSget_param_EGlpNum ( fp20_QSprob p, int whichparam, EGfp20_t * value);
06290
06291 fp20_QSLIB_INTERFACE char *fp20_QSget_probname ( fp20_QSprob p);
06292 fp20_QSLIB_INTERFACE char *fp20_QSget_objname ( fp20_QSprob p);
06293 fp20_QSLIB_INTERFACE char *fp20_QSversion ( void);
06294
06295 fp20_QSLIB_INTERFACE fp20_QSprob fp20_QScreate_prob ( const char *name, int objsense),
06296 fp20_QSread_prob ( const char *filename, const char *filetype),
06297 fp20_QSload_prob ( const char *probname, int ncols, int nrows, int *cmatcnt,
06298 int *cmatbeg, int *cmatind, EGfp20_t * cmatval, int objsense,
06299 EGfp20_t * obj, EGfp20_t * rhs, char *sense, EGfp20_t * lower,
06300 EGfp20_t * upper, const char **colnames, const char **rownames),
06301 fp20_QScopy_prob ( fp20_QSprob p, const char *newname);
06302
06303 fp20_QSLIB_INTERFACE fp20_QSbas fp20_QSget_basis ( fp20_QSprob p),
06304 fp20_QSread_basis ( fp20_QSprob p, const char *filename);
06305
06306 #ifdef __cplusplus
06307 }
06308 #endif
06309
06310
06311
06312
06313
06314
06315
06316
06317
06318
06319
06320
06321
06322
06323
06324
06325
06326
06327 #ifdef WIN32
06328 typedef struct fp20_QSLIB_INTERFACE fp20_qsline_reader *fp20_QSline_reader;
06329 typedef struct fp20_QSLIB_INTERFACE fp20_qsformat_error *fp20_QSformat_error;
06330 typedef struct fp20_QSLIB_INTERFACE fp20_qserror_collector *fp20_QSerror_collector;
06331 typedef struct fp20_QSLIB_INTERFACE fp20_qserror_memory *fp20_QSerror_memory;
06332 #else
06333 typedef struct fp20_qsline_reader *fp20_QSline_reader;
06334 typedef struct fp20_qsformat_error *fp20_QSformat_error;
06335 typedef struct fp20_qserror_collector *fp20_QSerror_collector;
06336 typedef struct fp20_qserror_memory *fp20_QSerror_memory;
06337 #endif
06338
06339 #ifdef __cplusplus
06340 extern "C"
06341 {
06342 #endif
06343 fp20_QSLIB_INTERFACE const char *fp20_QSformat_error_type_string (
06344 int tp);
06345
06346 fp20_QSLIB_INTERFACE int fp20_QSerror_get_type (
06347 fp20_QSformat_error error);
06348 fp20_QSLIB_INTERFACE const char *fp20_QSerror_get_desc (
06349 fp20_QSformat_error error);
06350 fp20_QSLIB_INTERFACE int fp20_QSerror_get_line_number (
06351 fp20_QSformat_error error);
06352 fp20_QSLIB_INTERFACE int fp20_QSerror_get_pos (
06353 fp20_QSformat_error error);
06354 fp20_QSLIB_INTERFACE const char *fp20_QSerror_get_line (
06355 fp20_QSformat_error error);
06356 fp20_QSLIB_INTERFACE void fp20_QSerror_print (
06357 FILE * f,
06358 fp20_QSformat_error error);
06359
06360 fp20_QSLIB_INTERFACE fp20_QSerror_collector fp20_QSerror_collector_new (
06361 void *fct,
06362 void *dest);
06363 fp20_QSLIB_INTERFACE fp20_QSerror_collector fp20_QSerror_memory_collector_new (
06364 fp20_QSerror_memory mem);
06365 fp20_QSLIB_INTERFACE void fp20_QSerror_collector_free (
06366 fp20_QSerror_collector c);
06367
06368
06369
06370
06371 fp20_QSLIB_INTERFACE fp20_QSline_reader fp20_QSline_reader_new (
06372 void *fct,
06373 void *data_src);
06374
06375
06376 fp20_QSLIB_INTERFACE void fp20_QSline_reader_free (
06377 fp20_QSline_reader reader);
06378
06379 fp20_QSLIB_INTERFACE void fp20_QSline_reader_set_error_collector (
06380 fp20_QSline_reader reader,
06381 fp20_QSerror_collector collector);
06382
06383 fp20_QSLIB_INTERFACE char *fp20_QSline_reader_get (
06384 fp20_QSline_reader reader,
06385 char *s,
06386 int size);
06387
06388 fp20_QSLIB_INTERFACE fp20_QSprob fp20_QSget_prob (
06389 fp20_QSline_reader reader,
06390 const char *probname,
06391 const char *filetype);
06392
06393
06394
06395
06396
06397
06398
06399 fp20_QSLIB_INTERFACE fp20_QSerror_memory fp20_QSerror_memory_create (
06400 int takeErrorLines);
06401 fp20_QSLIB_INTERFACE void fp20_QSerror_memory_free (
06402 fp20_QSerror_memory mem);
06403
06404 fp20_QSLIB_INTERFACE int fp20_QSerror_memory_get_nof (
06405 fp20_QSerror_memory mem,
06406 int error_type);
06407 fp20_QSLIB_INTERFACE int fp20_QSerror_memory_get_nerrors (
06408 fp20_QSerror_memory mem);
06409
06410 fp20_QSLIB_INTERFACE fp20_QSformat_error fp20_QSerror_memory_get_last_error (
06411 fp20_QSerror_memory mem);
06412 fp20_QSLIB_INTERFACE fp20_QSformat_error fp20_QSerror_memory_get_prev_error (
06413 fp20_QSformat_error e);
06414
06415
06416
06417
06418 fp20_QSLIB_INTERFACE void fp20_QSset_reporter (
06419 fp20_QSprob prob,
06420 int iterskip,
06421 void *fct,
06422 void *dest);
06423
06424 fp20_QSLIB_INTERFACE int fp20_QSreport_prob (
06425 fp20_QSprob p,
06426 const char *filetype,
06427 fp20_QSerror_collector c);
06428
06429 #ifdef __cplusplus
06430 }
06431 #endif
06432 #endif
06433
06434
06435
06436
06437
06438
06439
06440
06441
06442
06443
06444
06445
06446
06447
06448
06449
06450
06451
06452
06453
06454
06455
06456 #ifndef fp20_QS_FORMAT_ERROR_H
06457 #define fp20_QS_FORMAT_ERROR_H
06458
06459
06460
06461
06462
06463
06464
06465
06466
06467
06468
06469
06470
06471
06472
06473
06474
06475
06476
06477
06478
06479
06480
06481
06482
06483
06484
06485
06486
06487 typedef struct fp20_qsformat_error
06488 {
06489 char *desc;
06490 char *theLine;
06491 struct fp20_qsformat_error *next;
06492 int type;
06493 int lineNumber;
06494 int at;
06495 }
06496 fp20_qsformat_error;
06497
06498 extern int fp20_ILLformat_error_create (
06499 fp20_qsformat_error * error,
06500 int mode,
06501 const char *desc,
06502 int lineNum,
06503 const char *theLine,
06504 int atPos);
06505 extern void fp20_ILLformat_error_delete (
06506 fp20_qsformat_error * error);
06507
06508 extern void fp20_ILLformat_error_print (
06509 EGioFile_t * out,
06510 fp20_qsformat_error * e);
06511
06512
06513
06514
06515
06516
06517
06518
06519
06520 typedef int (
06521 *fp20_qsadd_error_fct) (
06522 void *dest,
06523 const fp20_qsformat_error * error);
06524
06525 typedef struct fp20_qserror_collector
06526 {
06527 fp20_qsadd_error_fct add_error;
06528 void *dest;
06529 }
06530 fp20_qserror_collector;
06531
06532 typedef struct fp20_qserror_memory
06533 {
06534 unsigned int nerror;
06535 fp20_qsformat_error *error_list;
06536 char has_error[QS_INPUT_NERROR];
06537 char hasErrorLines;
06538 }
06539 fp20_qserror_memory;
06540
06541
06542 extern fp20_qserror_collector *fp20_ILLerror_collector_new (
06543 fp20_qsadd_error_fct fct,
06544 void *dest);
06545
06546 fp20_qserror_collector *fp20_ILLerror_memory_collector_new (
06547 fp20_qserror_memory * dest);
06548
06549 extern void fp20_ILLerror_collector_free (
06550 fp20_qserror_collector * c);
06551
06552 #define fp20_ILLformat_error(collector, error) \
06553 ((collector)->add_error((collector)->dest, error))
06554
06555
06556 extern int fp20_ILLadd_error_to_memory (
06557 void *dest,
06558 const fp20_qsformat_error * error);
06559
06560 extern fp20_qserror_memory *fp20_ILLerror_memory_create (
06561 int takeErrorLines);
06562 extern void fp20_ILLerror_memory_free (
06563 fp20_qserror_memory * mem);
06564
06565 #endif
06566
06567
06568
06569
06570
06571
06572
06573
06574
06575
06576
06577
06578
06579
06580
06581
06582
06583
06584
06585
06586
06587
06588
06589 #ifndef fp20___ILL_RAWLP_H_
06590 #define fp20___ILL_RAWLP_H_
06591
06592
06593
06594
06595
06596
06597
06598
06599
06600 #define fp20_ILL_ISBLANK(p) \
06601 (((*(p))==' '||(*(p))=='\t'||(*(p))=='\r'||(*(p))=='\f') ? 1 : 0)
06602
06603
06604
06605
06606
06607
06608 typedef struct fp20_rawlpdata
06609 {
06610 char *name;
06611
06612 char *rhsname;
06613 char *rangesname;
06614 char *boundsname;
06615
06616 int objsense;
06617 int objindex;
06618
06619 int nrows;
06620 ILLsymboltab rowtab;
06621
06622 int sensesize;
06623 char *rowsense;
06624
06625 char *rhsind;
06626
06627 int rhssize;
06628 EGfp20_t *rhs;
06629 char *rangesind;
06630 struct fp20_colptr *ranges;
06631
06632 int ncols;
06633 ILLsymboltab coltab;
06634 int colsize;
06635 struct fp20_colptr **cols;
06636
06637 char *lbind;
06638 char *ubind;
06639 EGfp20_t *lower;
06640 EGfp20_t *upper;
06641
06642 int intsize;
06643 char *intmarker;
06644
06645
06646 char *refrow;
06647 int refrowind;
06648
06649 int is_sos_size;
06650 int *is_sos_member;
06651
06652
06653
06654 int nsos_member;
06655 int sos_weight_size;
06656 EGfp20_t *sos_weight;
06657
06658 int sos_col_size;
06659 int *sos_col;
06660
06661 int nsos;
06662 int sos_setsize;
06663 struct fp20_sosptr *sos_set;
06664
06665
06666 fp20_qserror_collector *error_collector;
06667 ILLptrworld ptrworld;
06668 }
06669 fp20_rawlpdata;
06670
06671 typedef struct fp20_colptr
06672 {
06673 EGfp20_t coef;
06674 struct fp20_colptr *next;
06675 int this_val;
06676 }
06677 fp20_colptr;
06678 extern fp20_colptr *fp20_ILLcolptralloc (
06679 ILLptrworld * p);
06680
06681 typedef struct fp20_sosptr
06682 {
06683 int nelem;
06684 int first;
06685 char type;
06686 }
06687 fp20_sosptr;
06688 extern const int fp20_ILL_SOS_TYPE1;
06689 extern const int fp20_ILL_SOS_TYPE2;
06690
06691 extern void fp20_ILLinit_rawlpdata (
06692 fp20_rawlpdata * lp,
06693 fp20_qserror_collector * collector);
06694 extern void fp20_ILLfree_rawlpdata (
06695 fp20_rawlpdata * lp);
06696 extern void fp20_ILLraw_clear_matrix (
06697 fp20_rawlpdata * lp);
06698
06699 extern const char *fp20_ILLraw_rowname (
06700 fp20_rawlpdata * lp,
06701 int i);
06702 extern const char *fp20_ILLraw_colname (
06703 fp20_rawlpdata * lp,
06704 int i);
06705
06706 extern int fp20_ILLraw_add_col (
06707 fp20_rawlpdata * lp,
06708 const char *name,
06709 int intmarker);
06710 extern int fp20_ILLraw_add_row (
06711 fp20_rawlpdata * lp,
06712 const char *name,
06713 int sense,
06714 const EGfp20_t rhs);
06715
06716 extern int fp20_ILLraw_add_col_coef (
06717 fp20_rawlpdata * lp,
06718 int colind,
06719 int rowind,
06720 EGfp20_t coef);
06721
06722 extern int fp20_ILLraw_init_ranges (
06723 fp20_rawlpdata * lp);
06724 extern int fp20_ILLraw_init_rhs (
06725 fp20_rawlpdata * lp);
06726
06727 extern int fp20_ILLraw_add_ranges_coef (
06728 fp20_rawlpdata * lp,
06729 int rowind,
06730 EGfp20_t coef);
06731
06732
06733 extern int fp20_ILLraw_add_sos (
06734 fp20_rawlpdata * lp,
06735 int sos_type);
06736
06737
06738 extern int fp20_ILLraw_add_sos_member (
06739 fp20_rawlpdata * lp,
06740 int colind);
06741
06742
06743 extern int fp20_ILLraw_is_mem_other_sos (
06744 fp20_rawlpdata * lp,
06745 int colind);
06746
06747 extern int fp20_ILLraw_set_rhs_name (
06748 fp20_rawlpdata * lp,
06749 const char *name,
06750 int *skip);
06751 extern int fp20_ILLraw_set_bounds_name (
06752 fp20_rawlpdata * lp,
06753 const char *name,
06754 int *skip);
06755 extern int fp20_ILLraw_set_ranges_name (
06756 fp20_rawlpdata * lp,
06757 const char *name,
06758 int *skip);
06759 extern void fp20_ILLprint_rawlpdata (
06760 fp20_rawlpdata * lp);
06761
06762 extern char *fp20_ILLraw_unique_name (
06763 ILLsymboltab * tab,
06764 char *prefix,
06765 int i);
06766 extern int fp20_ILLraw_fill_in_rownames (
06767 fp20_rawlpdata * lp);
06768
06769 extern int fp20_ILLraw_init_bounds (
06770 fp20_rawlpdata * lp);
06771
06772 extern const char *fp20_ILLraw_set_lowerBound (
06773 fp20_rawlpdata * lp,
06774 int i,
06775 EGfp20_t bnd);
06776 extern const char *fp20_ILLraw_set_upperBound (
06777 fp20_rawlpdata * lp,
06778 int i,
06779 EGfp20_t bnd);
06780 extern const char *fp20_ILLraw_set_fixedBound (
06781 fp20_rawlpdata * lp,
06782 int i,
06783 EGfp20_t bnd);
06784 extern const char *fp20_ILLraw_set_binaryBound (
06785 fp20_rawlpdata * lp,
06786 int i);
06787 extern const char *fp20_ILLraw_set_unbound (
06788 fp20_rawlpdata * lp,
06789 int colind);
06790 extern int fp20_ILLraw_fill_in_bounds (
06791 fp20_rawlpdata * lp);
06792
06793 extern int fp20_ILLraw_first_nondefault_bound (
06794 fp20_ILLlpdata * lp);
06795 extern int fp20_ILLraw_default_lower (
06796 fp20_ILLlpdata * lp,
06797 int i);
06798 extern int fp20_ILLraw_default_upper (
06799 fp20_ILLlpdata * lp,
06800 int i,
06801 int ri);
06802
06803 extern int fp20_ILLrawlpdata_to_lpdata (
06804 fp20_rawlpdata * raw,
06805 fp20_ILLlpdata * lp);
06806
06807 extern int fp20_ILLdata_error (
06808 fp20_qserror_collector * collector,
06809 const char *format,
06810 ...);
06811 extern void fp20_ILLdata_warn (
06812 fp20_qserror_collector * collector,
06813 const char *format,
06814 ...);
06815
06816 #endif
06817
06818
06819
06820
06821
06822
06823
06824
06825
06826
06827
06828
06829
06830
06831
06832
06833
06834
06835
06836
06837
06838
06839
06840 #ifndef fp20_MPS_H
06841 #define fp20_MPS_H
06842
06843
06844
06845
06846
06847
06848
06849 extern const char *fp20_ILLmps_section_name[ILL_MPS_N_SECTIONS + 2];
06850
06851
06852 extern int fp20_ILLread_mps (
06853 fp20_qsline_reader * file,
06854 const char *filename,
06855 fp20_rawlpdata * lp);
06856
06857 extern int fp20_ILLwrite_mps (
06858 fp20_ILLlpdata * lp,
06859 fp20_qserror_collector * collector);
06860
06861
06862
06863 #endif
06864
06865
06866
06867
06868
06869
06870
06871
06872
06873
06874
06875
06876
06877
06878
06879
06880
06881
06882
06883
06884
06885
06886
06887 #ifndef fp20___PRICE_H
06888 #define fp20___PRICE_H
06889
06890
06891 typedef struct fp20_price_res
06892 {
06893 int eindex;
06894 int dir;
06895 int lindex;
06896 int lvstat;
06897 int price_stat;
06898 EGfp20_t dinfeas;
06899 EGfp20_t pinfeas;
06900 }
06901 fp20_price_res;
06902
06903 int fp20_ILLprice_test_for_heap (
06904 fp20_lpinfo * const lp,
06905 fp20_price_info * const pinf,
06906 int const nkeys,
06907 EGfp20_t * keylist,
06908 int const algo,
06909 int const upd),
06910 fp20_ILLprice_build_heap (
06911 fp20_price_info * const pinf,
06912 int const nkeys,
06913 EGfp20_t * keylist),
06914 fp20_ILLprice_build_pricing_info (
06915 fp20_lpinfo * const lp,
06916 fp20_price_info * const pinf,
06917 int const phase),
06918 fp20_ILLprice_update_pricing_info (
06919 fp20_lpinfo * const lp,
06920 fp20_price_info * const pinf,
06921 int const phase,
06922 fp20_svector * const wz,
06923 int const eindex,
06924 int const lindex,
06925 EGfp20_t y),
06926 fp20_ILLprice_get_price (
06927 fp20_price_info * const p,
06928 int const phase),
06929 fp20_ILLprice_build_mpartial_info (
06930 fp20_lpinfo * const lp,
06931 fp20_price_info * const pinf,
06932 int const pricetype),
06933 fp20_ILLprice_build_pdevex_norms (
06934 fp20_lpinfo * const lp,
06935 fp20_p_devex_info * const pdinfo,
06936 int const reinit),
06937 fp20_ILLprice_update_pdevex_norms (
06938 fp20_lpinfo * const lp,
06939 fp20_p_devex_info * const pdinfo,
06940 int const eindex,
06941 EGfp20_t yl),
06942 fp20_ILLprice_build_psteep_norms (
06943 fp20_lpinfo * const lp,
06944 fp20_p_steep_info * const psinfo),
06945 fp20_ILLprice_build_ddevex_norms (
06946 fp20_lpinfo * const lp,
06947 fp20_d_devex_info * const ddinfo,
06948 int const reinit),
06949 fp20_ILLprice_update_ddevex_norms (
06950 fp20_lpinfo * const lp,
06951 fp20_d_devex_info * const ddinfo,
06952 int const eindex,
06953 EGfp20_t yl),
06954 fp20_ILLprice_build_dsteep_norms (
06955 fp20_lpinfo * const lp,
06956 fp20_d_steep_info * const dsinfo),
06957 fp20_ILLprice_get_dsteep_norms (
06958 fp20_lpinfo * const lp,
06959 int const count,
06960 int *constrowind,
06961 EGfp20_t * const norms),
06962 fp20_ILLprice_get_rownorms (
06963 fp20_lpinfo * const lp,
06964 fp20_price_info * const pinf,
06965 EGfp20_t * const rnorms),
06966 fp20_ILLprice_get_colnorms (
06967 fp20_lpinfo * const lp,
06968 fp20_price_info * const pinf,
06969 EGfp20_t * const cnorms),
06970 fp20_ILLprice_get_newnorms (
06971 fp20_lpinfo * const lp,
06972 int const nelems,
06973 EGfp20_t * const norms,
06974 int *const matcnt,
06975 int *const matbeg,
06976 int *const matind,
06977 EGfp20_t * const matval,
06978 int const option),
06979 fp20_ILLprice_get_new_rownorms (
06980 fp20_lpinfo * const lp,
06981 int const newrows,
06982 EGfp20_t * const rnorms,
06983 int *const rmatcnt,
06984 int *const rmatbeg,
06985 int *const rmatind,
06986 EGfp20_t * const rmatval),
06987 fp20_ILLprice_get_new_colnorms (
06988 fp20_lpinfo * const lp,
06989 int const newrows,
06990 EGfp20_t * const rnorms,
06991 int *const matcnt,
06992 int *const matbeg,
06993 int *const matind,
06994 EGfp20_t * const matval),
06995 fp20_ILLprice_load_rownorms (
06996 fp20_lpinfo * const lp,
06997 EGfp20_t * const rnorms,
06998 fp20_price_info * const pinf),
06999 fp20_ILLprice_load_colnorms (
07000 fp20_lpinfo * const lp,
07001 EGfp20_t * const cnorms,
07002 fp20_price_info * const pinf);
07003
07004
07005 void fp20_ILLprice_free_heap (
07006 fp20_price_info * const pinf),
07007 fp20_ILLprice_init_pricing_info (
07008 fp20_price_info * const pinf),
07009 fp20_ILLprice_free_pricing_info (
07010 fp20_price_info * const pinf),
07011 fp20_ILLprice_free_mpartial_info (
07012 fp20_mpart_info * p),
07013 fp20_ILLprice_init_mpartial_price (
07014 fp20_lpinfo * const lp,
07015 fp20_price_info * const pinf,
07016 int const phase,
07017 int const pricetype),
07018 fp20_ILLprice_update_mpartial_price (
07019 fp20_lpinfo * const lp,
07020 fp20_price_info * const pinf,
07021 int const phase,
07022 int const pricetype),
07023 fp20_ILLprice_delete_onempart_price (
07024
07025 fp20_price_info * const pinf,
07026 int const indx,
07027 int const pricetype),
07028 fp20_ILLprice_mpartial_group (
07029 fp20_lpinfo * const lp,
07030 fp20_mpart_info * const p,
07031 int const phase,
07032 int const g,
07033 int const pricetype),
07034 fp20_ILLprice_column (
07035 fp20_lpinfo * const lp,
07036 int const ix,
07037 int const phase,
07038 fp20_price_res * const pr),
07039 fp20_ILLprice_row (
07040 fp20_lpinfo * const lp,
07041 int const ix,
07042 int const phase,
07043 fp20_price_res * const pr),
07044 fp20_ILLprice_update_psteep_norms (
07045 fp20_lpinfo * lp,
07046 fp20_p_steep_info * psinfo,
07047 fp20_svector * wz,
07048 int eindex,
07049 EGfp20_t yl),
07050 fp20_ILLprice_update_dsteep_norms (
07051 fp20_lpinfo * const lp,
07052 fp20_d_steep_info * const dsinfo,
07053 fp20_svector * const wz,
07054 int const lindex,
07055 EGfp20_t yl),
07056 fp20_ILLprice_compute_dual_inf (
07057 fp20_lpinfo * const lp,
07058 fp20_price_info * const p,
07059 int *const ix,
07060 int const icnt,
07061 int const phase),
07062 fp20_ILLprice_primal (
07063 fp20_lpinfo * const lp,
07064 fp20_price_info * const pinf,
07065 fp20_price_res * const pr,
07066 int const phase),
07067 fp20_ILLprice_compute_primal_inf (
07068 fp20_lpinfo * const lp,
07069 fp20_price_info * const p,
07070 int *const ix,
07071 int const icnt,
07072 int const phase),
07073 fp20_ILLprice_dual (
07074 fp20_lpinfo * const lp,
07075 fp20_price_info * const pinf,
07076 int const phase,
07077 fp20_price_res * const pr);
07078
07079 void fp20_test_dsteep_norms (
07080 fp20_lpinfo * const lp,
07081 fp20_price_info * const p);
07082
07083 #endif
07084
07085
07086
07087
07088
07089
07090
07091
07092
07093
07094
07095
07096
07097
07098
07099
07100
07101
07102
07103
07104
07105
07106 #ifndef fp20___PRIORITY_H__
07107 #define fp20___PRIORITY_H__
07108
07109
07110
07111
07112
07113
07114 typedef struct fp20_ILLpriority
07115 {
07116 fp20_ILLdheap fp20_heap;
07117 union fp20_ILLpri_data
07118 {
07119 void *data;
07120 int next;
07121 }
07122 *pri_info;
07123 int space;
07124 int freelist;
07125 }
07126 fp20_ILLpriority;
07127
07128 void fp20_ILLutil_priority_free (
07129 fp20_ILLpriority * pri),
07130 fp20_ILLutil_priority_delete (
07131 fp20_ILLpriority * pri,
07132 int handle),
07133 fp20_ILLutil_priority_changekey (
07134 fp20_ILLpriority * pri,
07135 int handle,
07136 EGfp20_t * newkey),
07137 fp20_ILLutil_priority_findmin (
07138 fp20_ILLpriority * pri,
07139 EGfp20_t * keyval,
07140 void **en),
07141 fp20_ILLutil_priority_deletemin (
07142 fp20_ILLpriority * pri,
07143 EGfp20_t * keyval,
07144 void **en);
07145
07146 int fp20_ILLutil_priority_init (
07147 fp20_ILLpriority * pri,
07148 int k),
07149 fp20_ILLutil_priority_insert (
07150 fp20_ILLpriority * pri,
07151 void *data,
07152 EGfp20_t * keyval,
07153 int *handle);
07154
07155
07156
07157 #endif
07158
07159
07160
07161
07162
07163
07164
07165
07166
07167
07168
07169
07170
07171
07172
07173
07174
07175
07176
07177
07178
07179
07180
07181 #ifndef fp20___RATIO_H
07182 #define fp20___RATIO_H
07183 typedef struct fp20_ratio_res
07184 {
07185 EGfp20_t tz;
07186 int eindex;
07187 int lindex;
07188 int lvstat;
07189 int ratio_stat;
07190 int boundch;
07191 int coeffch;
07192 EGfp20_t lbound;
07193 EGfp20_t ecoeff;
07194 EGfp20_t pivotval;
07195 }
07196 fp20_ratio_res;
07197
07198 void fp20_ILLratio_pI_test (
07199 fp20_lpinfo * const lp,
07200 int const eindex,
07201 int const dir,
07202 fp20_ratio_res * const rs),
07203 fp20_ILLratio_pII_test (
07204 fp20_lpinfo * const lp,
07205 int const eindex,
07206 int const dir,
07207 fp20_ratio_res * const rs),
07208 fp20_ILLratio_dI_test (
07209 fp20_lpinfo * const lp,
07210 int const lindex,
07211 int const lvstat,
07212 fp20_ratio_res * const rs),
07213 fp20_ILLratio_dII_test (
07214 fp20_lpinfo * const lp,
07215
07216 int const lvstat,
07217 fp20_ratio_res * const rs),
07218 fp20_ILLratio_longdII_test (
07219 fp20_lpinfo * const lp,
07220 int const lindex,
07221 int const lvstat,
07222 fp20_ratio_res * const rs),
07223 fp20_ILLratio_pivotin_test (
07224 fp20_lpinfo * const lp,
07225 int *const rlist,
07226 int const rcnt,
07227 fp20_ratio_res * const rs);
07228
07229 #endif
07230
07231
07232
07233
07234
07235
07236
07237
07238
07239
07240
07241
07242
07243
07244
07245
07246
07247
07248
07249
07250
07251
07252
07253 #ifndef fp20_READ_LP_STATE_H
07254 #define fp20_READ_LP_STATE_H
07255
07256
07257
07258
07259
07260
07261
07262
07263
07264
07265
07266
07267
07268
07269 typedef struct fp20_ILLread_lp_state
07270 {
07271 fp20_qsline_reader *file;
07272 const char *file_name;
07273 char *p;
07274 EGfp20_t bound_val;
07275 int fp20_interactive;
07276 int line_num;
07277 int column_index;
07278 char realline[ILL_namebufsize];
07279 char line[ILL_namebufsize];
07280 char field[ILL_namebufsize + 1];
07281 char fieldOnFirstCol;
07282 char eof;
07283 char sense_val;
07284 }
07285 fp20_ILLread_lp_state;
07286
07287 extern int fp20_ILLread_lp_state_init (
07288 fp20_ILLread_lp_state * state,
07289 fp20_qsline_reader * file,
07290 const char *fp20_fname,
07291 int interactve);
07292 extern int fp20_ILLread_lp_state_next_line (
07293 fp20_ILLread_lp_state * state);
07294 extern int fp20_ILLread_lp_state_next_var (
07295 fp20_ILLread_lp_state * state);
07296 extern int fp20_ILLread_lp_state_keyword (
07297 fp20_ILLread_lp_state * state,
07298 const char **kwd);
07299 extern int fp20_ILLread_lp_state_bad_keyword (
07300 fp20_ILLread_lp_state * state);
07301 extern int fp20_ILLtest_lp_state_keyword (
07302 fp20_ILLread_lp_state * state,
07303 const char *kwd[]);
07304 extern int fp20_ILLread_lp_state_next_field (
07305 fp20_ILLread_lp_state * state);
07306 extern int fp20_ILLread_lp_state_next_field_on_line (
07307 fp20_ILLread_lp_state * state);
07308 extern void fp20_ILLread_lp_state_prev_field (
07309 fp20_ILLread_lp_state * state);
07310 extern int fp20_ILLread_lp_state_sign (
07311 fp20_ILLread_lp_state * state,
07312 EGfp20_t * sign);
07313 extern int fp20_ILLread_lp_state_possible_coef (
07314 fp20_ILLread_lp_state * state,
07315 EGfp20_t * coef,
07316 const EGfp20_t defValue);
07317
07318
07319
07320 extern int fp20_ILLread_lp_state_possible_bound_value (
07321 fp20_ILLread_lp_state * state);
07322
07323
07324
07325 extern int fp20_ILLread_lp_state_colon (
07326 fp20_ILLread_lp_state * state);
07327 extern int fp20_ILLread_lp_state_has_colon (
07328 fp20_ILLread_lp_state * state);
07329 extern int fp20_ILLread_lp_statxe_has_colon (
07330 fp20_ILLread_lp_state * state);
07331 extern int fp20_ILLread_lp_state_next_constraint (
07332 fp20_ILLread_lp_state * state);
07333 extern int fp20_ILLread_lp_state_sense (
07334 fp20_ILLread_lp_state * state);
07335 extern int fp20_ILLtest_lp_state_sense (
07336 fp20_ILLread_lp_state * state,
07337 int all);
07338 extern void fp20_ILLtest_lp_state_bound_sense (
07339 fp20_ILLread_lp_state * state);
07340 extern int fp20_ILLread_lp_state_value (
07341 fp20_ILLread_lp_state * state,
07342 EGfp20_t * d);
07343 extern int fp20_ILLtest_lp_state_next_is (
07344 fp20_ILLread_lp_state * state,
07345 const char *str);
07346 extern int fp20_ILLread_lp_state_skip_blanks (
07347 fp20_ILLread_lp_state * state,
07348 int wrapLines);
07349
07350 extern int fp20_ILLcheck_subject_to (
07351 fp20_ILLread_lp_state * state);
07352
07353
07354
07355
07356 extern int fp20_ILLlp_error (
07357 fp20_ILLread_lp_state * state,
07358 const char *format,
07359 ...);
07360 extern void fp20_ILLlp_warn (
07361 fp20_ILLread_lp_state * state,
07362 const char *format,
07363 ...);
07364
07365
07366
07367
07368 extern int fp20_ILLget_value (
07369 char *line,
07370 EGfp20_t * coef);
07371
07372 #endif
07373
07374
07375
07376
07377
07378
07379
07380
07381
07382
07383
07384
07385
07386
07387
07388
07389
07390
07391
07392
07393
07394
07395
07396 #ifndef fp20_READ_MPS_STATE_H
07397 #define fp20_READ_MPS_STATE_H
07398
07399
07400
07401 typedef struct fp20_ILLread_mps_state_struct
07402 {
07403 int section[ILL_MPS_N_SECTIONS];
07404 ILLmps_section active;
07405 const char *file_name;
07406 fp20_qsline_reader *file;
07407 unsigned int line_num;
07408 unsigned int field_num;
07409 int intvar;
07410 int sosvar;
07411 char line[ILL_namebufsize];
07412 char key[ILL_namebufsize];
07413 char field[ILL_namebufsize];
07414 char *obj;
07415 char *p;
07416 }
07417 fp20_ILLread_mps_state;
07418
07419 extern int fp20_ILLmps_state_init (
07420 fp20_ILLread_mps_state * state,
07421 fp20_qsline_reader * file,
07422 const char *fp20_fname);
07423 extern void fp20_ILLmps_state_clear (
07424 fp20_ILLread_mps_state * state);
07425 extern int fp20_ILLmps_set_section (
07426 fp20_ILLread_mps_state * state,
07427 const ILLmps_section sec);
07428
07429 extern int fp20_ILLmps_next_line (
07430 fp20_ILLread_mps_state * state);
07431 extern int fp20_ILLmps_next_field (
07432 fp20_ILLread_mps_state * state);
07433 extern int fp20_ILLmps_next_coef (
07434 fp20_ILLread_mps_state * state,
07435 EGfp20_t * coef);
07436 extern int fp20_ILLmps_next_bound (
07437 fp20_ILLread_mps_state * state,
07438 EGfp20_t * coef);
07439 extern void fp20_ILLmps_check_end_of_line (
07440 fp20_ILLread_mps_state * state);
07441 extern void fp20_ILLmps_set_end_of_line (
07442 fp20_ILLread_mps_state * state);
07443
07444 extern int fp20_ILLmps_int_sos_mode (
07445 fp20_ILLread_mps_state * state);
07446
07447 extern const char *fp20_ILLmps_possibly_blank_name (
07448 const char *field,
07449 fp20_ILLread_mps_state * state,
07450 ILLsymboltab * tab);
07451 extern int fp20_ILLmps_empty_key (
07452 fp20_ILLread_mps_state * state);
07453 extern int fp20_ILLmps_empty_field (
07454 fp20_ILLread_mps_state * state);
07455
07456 extern int fp20_ILLmps_error (
07457 fp20_ILLread_mps_state * state,
07458 const char *format,
07459 ...);
07460 extern void fp20_ILLmps_warn (
07461 fp20_ILLread_mps_state * state,
07462 const char *format,
07463 ...);
07464
07465 #endif
07466
07467
07468
07469
07470
07471
07472
07473
07474
07475
07476
07477
07478
07479
07480
07481
07482
07483
07484
07485
07486
07487
07488
07489
07490 #ifndef fp20___SIMPLEX_H
07491 #define fp20___SIMPLEX_H
07492
07493 struct itcnt_t;
07494 typedef struct fp20_param_info
07495 {
07496 int origalgo;
07497 int pphaseI;
07498 int pphaseII;
07499 int dphaseI;
07500 int dphaseII;
07501 int p_strategy;
07502 int d_strategy;
07503 }
07504 fp20_param_info;
07505
07506 typedef struct fp20_iter_info
07507 {
07508 int newphase;
07509 int nextphase;
07510 int nextstep;
07511 int sdisplay;
07512 int itercnt;
07513 int solstatus;
07514 int curtime;
07515 int rounds;
07516 int chkobj;
07517 int nosolve;
07518 int noprog;
07519 int inner;
07520 int algorithm;
07521 int resumeid;
07522 int pricetype;
07523 int n_restart;
07524 int n_pivot_fail;
07525 EGfp20_t prevobj;
07526 EGfp20_t objtol;
07527 fp20_param_info oldinfo;
07528 }
07529 fp20_iter_info;
07530
07531 void fp20_ILLsimplex_init_lpinfo ( fp20_lpinfo * lp),
07532 fp20_ILLsimplex_free_lpinfo ( fp20_lpinfo * lp),
07533 fp20_ILLsimplex_load_lpinfo ( fp20_ILLlpdata * qslp, fp20_lpinfo * lp),
07534 fp20_ILLsimplex_set_bound ( fp20_lpinfo * lp, const EGfp20_t * objbound, int sense);
07535 void fp20_free_internal_lpinfo ( fp20_lpinfo * lp);
07536 void fp20_init_internal_lpinfo ( fp20_lpinfo * lp);
07537 int fp20_build_internal_lpinfo ( fp20_lpinfo * lp);
07538 int fp20_ILLsimplex_retest_psolution ( fp20_lpinfo * lp, fp20_price_info * p, int phase,
07539 fp20_feas_info * fs),
07540 fp20_ILLsimplex_retest_dsolution ( fp20_lpinfo * lp, fp20_price_info * p, int phase,
07541 fp20_feas_info * fs),
07542 fp20_ILLsimplex_solution ( fp20_lpinfo * lp, EGfp20_t * xz, EGfp20_t * piz,
07543 EGfp20_t * dz, EGfp20_t * objval),
07544 fp20_ILLsimplex_infcertificate ( fp20_lpinfo * lp, EGfp20_t * pi),
07545 fp20_ILLsimplex ( fp20_lpinfo * lp, int algorithm, fp20_ILLlp_basis * B,
07546 fp20_price_info * pinf, int *sol_status, int sdisplay, itcnt_t* itcnt),
07547 fp20_ILLsimplex_pivotin ( fp20_lpinfo * lp, fp20_price_info * pinf, int rcnt,
07548 int *rlist, int pivot_opt, int *basis_mod);
07549
07550 #endif
07551
07552
07553
07554
07555
07556
07557
07558
07559
07560
07561
07562
07563
07564
07565
07566
07567
07568
07569
07570
07571
07572
07573
07574 #ifndef fp20_WRITE_LP_STATE_H
07575 #define fp20_WRITE_LP_STATE_H
07576
07577
07578
07579
07580
07581
07582
07583
07584
07585
07586
07587
07588
07589 typedef struct fp20_ILLwrite_lp_state
07590 {
07591 char buf[ILL_namebufsize];
07592 char *p;
07593 int startlen;
07594 int total;
07595 }
07596 fp20_ILLwrite_lp_state;
07597
07598 extern void fp20_ILLwrite_lp_state_init (
07599 fp20_ILLwrite_lp_state * line,
07600 const char *str);
07601 extern void fp20_ILLwrite_lp_state_append (
07602 fp20_ILLwrite_lp_state * line,
07603 const char *str);
07604 extern void fp20_ILLwrite_lp_state_append_coef (
07605 fp20_ILLwrite_lp_state * line,
07606 EGfp20_t v,
07607 int cnt);
07608
07609
07610
07611
07612 extern void fp20_ILLwrite_lp_state_append_number (
07613 fp20_ILLwrite_lp_state * line,
07614 EGfp20_t v);
07615 extern void fp20_ILLwrite_lp_state_save_start (
07616 fp20_ILLwrite_lp_state * line);
07617 extern void fp20_ILLwrite_lp_state_start (
07618 fp20_ILLwrite_lp_state * line);
07619
07620 #endif
07621
07622
07623
07624
07625
07626
07627
07628
07629
07630
07631
07632
07633
07634
07635
07636
07637
07638
07639
07640
07641
07642
07643
07644 #ifndef fp20_ILL_LIB_H
07645 #define fp20_ILL_LIB_H
07646
07647
07648
07649
07650
07651
07652
07653
07654
07655
07656
07657
07658
07659
07660 struct itcnt_t;
07661
07662 int fp20_ILLlib_optimize ( fp20_lpinfo * lp, fp20_ILLlp_basis * B, fp20_price_info * pinf, int algo,
07663 int *status, int simplex_display, struct itcnt_t*itcnt),
07664 fp20_ILLlib_cache_solution ( fp20_lpinfo * lp, fp20_ILLlp_cache * C),
07665 fp20_ILLlib_solution ( fp20_lpinfo * lp, fp20_ILLlp_cache * C, EGfp20_t * val,
07666 EGfp20_t * x, EGfp20_t * pi, EGfp20_t * slack, EGfp20_t * rc),
07667 fp20_ILLlib_get_x ( fp20_lpinfo * lp, fp20_ILLlp_cache * C, EGfp20_t * x),
07668 fp20_ILLlib_get_slack ( fp20_lpinfo * lp, fp20_ILLlp_cache * C, EGfp20_t * slack),
07669 fp20_ILLlib_objval ( fp20_lpinfo * lp, fp20_ILLlp_cache * C, EGfp20_t * val),
07670 fp20_ILLlib_tableau ( fp20_lpinfo * lp, int row, EGfp20_t * binv, EGfp20_t * tabrow),
07671 fp20_ILLlib_basis_order ( fp20_lpinfo * lp, int *header),
07672 fp20_ILLlib_newrow ( fp20_lpinfo * lp, fp20_ILLlp_basis * B,const EGfp20_t rhs, int sense,
07673 const EGfp20_t range, const char *name),
07674 fp20_ILLlib_newrows ( fp20_lpinfo * lp, fp20_ILLlp_basis * B, int num,const EGfp20_t * rhs,
07675 char *sense, const EGfp20_t * range, const char **names),
07676 fp20_ILLlib_addrow ( fp20_lpinfo * lp, fp20_ILLlp_basis * B, int cnt, int *ind,
07677 const EGfp20_t * val, const EGfp20_t rhs, int sense,const EGfp20_t range,
07678 const char *rowname),
07679 fp20_ILLlib_addrows ( fp20_lpinfo * lp, fp20_ILLlp_basis * B, int num, int *rmatcnt,
07680 int *rmatbeg, int *rmatind,const EGfp20_t * rmatval,const EGfp20_t * rhs,
07681 char *sense, const EGfp20_t * range, const char **names, int *nofactor),
07682 fp20_ILLlib_delrows ( fp20_lpinfo * lp, fp20_ILLlp_basis * B, fp20_ILLlp_cache * C, int num,
07683 int *dellist, int *basis_ok, int *cache_ok),
07684 fp20_ILLlib_newcol ( fp20_lpinfo * lp, fp20_ILLlp_basis * B,const EGfp20_t obj,
07685 const EGfp20_t lower,const EGfp20_t upper, const char *name, int factorok),
07686 fp20_ILLlib_newcols ( fp20_lpinfo * lp, fp20_ILLlp_basis * B, int num, EGfp20_t * obj,
07687 EGfp20_t * lower, EGfp20_t * upper, const char **names, int factorok),
07688 fp20_ILLlib_addcol ( fp20_lpinfo * lp, fp20_ILLlp_basis * B, int cnt, int *ind,
07689 EGfp20_t * val,const EGfp20_t obj,const EGfp20_t lower,const EGfp20_t upper,
07690 const char *name, int factorok),
07691 fp20_ILLlib_addcols ( fp20_lpinfo * lp, fp20_ILLlp_basis * B, int num, int *cmatcnt,
07692 int *cmatbeg, int *cmatind, EGfp20_t * cmatval, EGfp20_t * obj,
07693 EGfp20_t * lower, EGfp20_t * upper, const char **names, int factorok),
07694 fp20_ILLlib_delcols ( fp20_lpinfo * lp, fp20_ILLlp_basis * B, int num, int *dellist,
07695 int *basis_ok),
07696 fp20_ILLlib_chgcoef ( fp20_lpinfo * lp, int rowindex, int colindex, EGfp20_t coef),
07697 fp20_ILLlib_getcoef (fp20_lpinfo *lp, int rowindex, int colindex, EGfp20_t* coef),
07698 fp20_ILLlib_chgrange (fp20_lpinfo *lp, int indx, EGfp20_t coef),
07699 fp20_ILLlib_chgsense ( fp20_lpinfo * lp, int num, int *rowlist, char *sense),
07700 fp20_ILLlib_getsenses (fp20_lpinfo *lp, char *senses),
07701 fp20_ILLlib_getrows ( fp20_lpinfo * lp, int num, int *rowlist, int **rowcnt,
07702 int **rowbeg, int **rowind, EGfp20_t ** rowval, EGfp20_t ** rhs,
07703 char **sense, EGfp20_t ** range, char ***names),
07704 fp20_ILLlib_getcols ( fp20_lpinfo * lp, int num, int *collist, int **colcnt,
07705 int **colbeg, int **colind, EGfp20_t ** colval, EGfp20_t ** obj,
07706 EGfp20_t ** lower, EGfp20_t ** upper, char ***names),
07707 fp20_ILLlib_getobj ( fp20_lpinfo * lp, EGfp20_t * obj),
07708 fp20_ILLlib_getobj_list (fp20_lpinfo *lp, int num, int* collist, EGfp20_t* obj),
07709 fp20_ILLlib_chgobj ( fp20_lpinfo * lp, int indx, EGfp20_t coef),
07710 fp20_ILLlib_getrhs ( fp20_lpinfo * lp, EGfp20_t * rhs),
07711 fp20_ILLlib_chgrhs ( fp20_lpinfo * lp, int indx, EGfp20_t coef),
07712 fp20_ILLlib_getintflags ( fp20_lpinfo * lp, int *intflags),
07713 fp20_ILLlib_rownames ( fp20_lpinfo * lp, char **rownames),
07714 fp20_ILLlib_colnames ( fp20_lpinfo * lp, char **colnames),
07715 fp20_ILLlib_colindex ( fp20_lpinfo * lp, const char *name, int *colindex),
07716 fp20_ILLlib_rowindex ( fp20_lpinfo * lp, const char *name, int *rowindex),
07717 fp20_ILLlib_chgbnd ( fp20_lpinfo * lp, int indx, int lu,const EGfp20_t bnd),
07718 fp20_ILLlib_chgbnds ( fp20_lpinfo * lp, int cnt, int *indx, char *lu, const EGfp20_t * bnd),
07719 fp20_ILLlib_getbnd ( fp20_lpinfo * lp, int indx, int lu, EGfp20_t * bnd),
07720 fp20_ILLlib_getbnds ( fp20_lpinfo * lp, EGfp20_t * lower, EGfp20_t * upper),
07721 fp20_ILLlib_getbnds_list ( fp20_lpinfo *lp, int num, int*collist, EGfp20_t *lower,
07722 EGfp20_t *upper),
07723 fp20_ILLlib_strongbranch ( fp20_lpinfo * lp, fp20_price_info * pinf, int *candidatelist,
07724 int ncand, EGfp20_t * xlist, EGfp20_t * downpen, EGfp20_t * uppen,
07725 int iterations, EGfp20_t objbound, struct itcnt_t*itcnt),
07726 fp20_ILLlib_getbasis ( fp20_lpinfo * lp, char *cstat, char *rstat),
07727 fp20_ILLlib_loadbasis ( fp20_ILLlp_basis * B, int nstruct, int nrows, char *cstat,
07728 char *rstat),
07729 fp20_ILLlib_readbasis ( fp20_lpinfo * lp, fp20_ILLlp_basis * B, const char *fp20_fname),
07730 fp20_ILLlib_writebasis ( fp20_lpinfo * lp, fp20_ILLlp_basis * B, const char *fp20_fname),
07731 fp20_ILLlib_getrownorms ( fp20_lpinfo * lp, fp20_price_info * pinf, EGfp20_t * rownorms),
07732 fp20_ILLlib_loadrownorms ( fp20_lpinfo * lp, fp20_price_info * pinf, EGfp20_t * rownorms),
07733 fp20_ILLlib_recompute_rownorms ( fp20_lpinfo * lp, fp20_price_info * pinf),
07734 fp20_ILLlib_iter ( fp20_lpinfo * lp),
07735 fp20_ILLlib_print_x ( EGioFile_t * fd, fp20_lpinfo * lp, fp20_ILLlp_cache * C, EGfp20_t * x,
07736 int nonZerosOnly),
07737 fp20_ILLwrite_lp_file ( fp20_ILLlpdata * lp, EGioFile_t * eout, fp20_qserror_collector * c);
07738
07739
07740 extern int fp20_ILLlib_findName (
07741 fp20_ILLlpdata * qslp,
07742 int forRow,
07743 const char *name,
07744 int id,
07745 char buf[ILL_namebufsize]);
07746
07747
07748
07749
07750
07751
07752
07753 int fp20_ILLpresolve_add_logicals (
07754 fp20_ILLlpdata * lp);
07755
07756
07757
07758
07759
07760
07761
07762
07763 int fp20_ILLmip_binary_dfs (
07764 fp20_lpinfo * lp);
07765
07766 #endif
07767 #ifdef HAVE_LONG_DOUBLE
07768 #if HAVE_LONG_DOUBLE
07769
07770
07771
07772
07773
07774
07775
07776
07777
07778
07779
07780
07781
07782
07783
07784
07785
07786
07787
07788
07789
07790
07791
07792 #ifndef ldbl___QS_QSTRUCT_H
07793 #define ldbl___QS_QSTRUCT_H
07794
07795 typedef struct ldbl_qsdata
07796 {
07797 struct ldbl_ILLlpdata *qslp;
07798 struct ldbl_lpinfo *lp;
07799 struct ldbl_price_info *pricing;
07800 struct ldbl_ILLlp_basis *basis;
07801 struct ldbl_ILLlp_cache *cache;
07802 char *name;
07803 int qstatus;
07804 int factorok;
07805 int simplex_display;
07806 int simplex_scaling;
07807 itcnt_t itcnt;
07808 long double uobjlim;
07809 long double lobjlim;
07810 }
07811 ldbl_QSdata;
07812
07813 #endif
07814 #endif
07815 #endif
07816 #ifdef HAVE_LONG_DOUBLE
07817 #if HAVE_LONG_DOUBLE
07818
07819
07820
07821
07822
07823
07824
07825
07826
07827
07828
07829
07830
07831
07832
07833
07834
07835
07836
07837
07838
07839
07840
07841 #ifndef ldbl_EDITOR_H
07842 #define ldbl_EDITOR_H
07843
07844 extern void ldbl_ILLeditor_init (
07845 void);
07846 extern void ldbl_ILLeditor (
07847 ldbl_QSdata * p);
07848 extern int ldbl_ILLeditor_solve (
07849 ldbl_QSdata * p,
07850 int salgo);
07851
07852 #endif
07853 #endif
07854 #endif
07855 #ifdef HAVE_LONG_DOUBLE
07856 #if HAVE_LONG_DOUBLE
07857
07858
07859
07860
07861
07862
07863
07864
07865
07866
07867
07868
07869
07870
07871
07872
07873
07874
07875
07876
07877
07878
07879
07880
07881
07882
07883
07884
07885
07886 #ifndef ldbl___SVECTOR_H
07887 #define ldbl___SVECTOR_H
07888
07889 typedef struct ldbl_svector
07890 {
07891 int nzcnt;
07892 int *indx;
07893 int size;
07894 long double *coef;
07895 }
07896 ldbl_svector;
07897
07898 void ldbl_ILLsvector_init (
07899 ldbl_svector * s),
07900 ldbl_ILLsvector_free (
07901 ldbl_svector * s);
07902
07903 int ldbl_ILLsvector_alloc (
07904 ldbl_svector * s,
07905 int nzcnt),
07906 ldbl_ILLsvector_copy (
07907 const ldbl_svector * s_in,
07908 ldbl_svector * s_out);
07909
07910 #endif
07911
07912
07913
07914
07915
07916
07917
07918 #ifndef ldbl___HEAP_H
07919 #define ldbl___HEAP_H
07920
07921 typedef struct
07922 {
07923 int *entry;
07924 int *loc;
07925 long double *key;
07926 int hexist;
07927 int maxsize;
07928 int size;
07929 }
07930 ldbl_heap;
07931
07932 void ldbl_ILLheap_insert (
07933 ldbl_heap * const h,
07934 int const ix),
07935 ldbl_ILLheap_modify (
07936 ldbl_heap * const h,
07937 int const ix),
07938 ldbl_ILLheap_delete (
07939 ldbl_heap * const h,
07940 int const ix),
07941 ldbl_ILLheap_init (
07942 ldbl_heap * const h),
07943 ldbl_ILLheap_free (
07944 ldbl_heap * const h);
07945
07946 int ldbl_ILLheap_findmin (
07947 ldbl_heap * const h),
07948 ldbl_ILLheap_build (
07949 ldbl_heap * const h,
07950 int const nelems,
07951 long double * key);
07952
07953 #endif
07954
07955
07956
07957
07958
07959
07960
07961 #ifndef ldbl___MATRIX_H
07962 #define ldbl___MATRIX_H
07963
07964 typedef struct ldbl_ILLmatrix
07965 {
07966 long double *matval;
07967 int *matcnt;
07968 int *matind;
07969 int *matbeg;
07970 int matcols;
07971 int matrows;
07972 int matcolsize;
07973 int matsize;
07974 int matfree;
07975
07976
07977 }
07978 ldbl_ILLmatrix;
07979
07980 void ldbl_ILLmatrix_init (
07981 ldbl_ILLmatrix * A);
07982 void ldbl_ILLmatrix_free (
07983 ldbl_ILLmatrix * A);
07984 void ldbl_ILLmatrix_prt (
07985 EGioFile_t * fd,
07986 ldbl_ILLmatrix * A);
07987
07988 #endif
07989 #endif
07990 #endif
07991 #ifdef HAVE_LONG_DOUBLE
07992 #if HAVE_LONG_DOUBLE
07993
07994
07995
07996
07997
07998
07999
08000
08001
08002
08003
08004
08005
08006
08007
08008
08009
08010
08011
08012
08013
08014
08015
08016 #ifndef ldbl___QS_FACTOR_H_
08017 #define ldbl___QS_FACTOR_H_
08018
08019 typedef char ldbl_QSbool;
08020
08021 typedef struct ldbl_uc_info
08022 {
08023 int cbeg;
08024 int nzcnt;
08025 int next;
08026 int prev;
08027 int delay;
08028 }
08029 ldbl_uc_info;
08030
08031 typedef struct ldbl_ur_info
08032 {
08033 long double max;
08034 int rbeg;
08035 int nzcnt;
08036 int pivcnt;
08037 int next;
08038 int prev;
08039 int delay;
08040 }
08041 ldbl_ur_info;
08042
08043 typedef struct ldbl_lc_info
08044 {
08045 int cbeg;
08046 int nzcnt;
08047 int c;
08048 int crank;
08049 int delay;
08050 }
08051 ldbl_lc_info;
08052
08053 typedef struct ldbl_lr_info
08054 {
08055 int rbeg;
08056 int nzcnt;
08057 int r;
08058 int rrank;
08059 int delay;
08060 }
08061 ldbl_lr_info;
08062
08063 typedef struct ldbl_er_info
08064 {
08065 int rbeg;
08066 int nzcnt;
08067 int r;
08068 }
08069 ldbl_er_info;
08070
08071 typedef struct ldbl_factor_work
08072 {
08073 int max_k;
08074 long double fzero_tol;
08075 long double szero_tol;
08076 long double partial_tol;
08077 double ur_space_mul;
08078 double uc_space_mul;
08079 double lc_space_mul;
08080 double lr_space_mul;
08081 double er_space_mul;
08082 double grow_mul;
08083 int p;
08084 int etamax;
08085 double minmult;
08086 double maxmult;
08087 double updmaxmult;
08088 double dense_fract;
08089 int dense_min;
08090
08091 long double maxelem_orig;
08092 int nzcnt_orig;
08093 long double maxelem_factor;
08094 int nzcnt_factor;
08095 long double maxelem_cur;
08096 int nzcnt_cur;
08097
08098 long double partial_cur;
08099
08100 int dim;
08101 int stage;
08102 int nstages;
08103 int etacnt;
08104 long double *work_coef;
08105 int *work_indx;
08106 ldbl_uc_info *uc_inf;
08107 ldbl_ur_info *ur_inf;
08108 ldbl_lc_info *lc_inf;
08109 ldbl_lr_info *lr_inf;
08110 ldbl_er_info *er_inf;
08111 int *ucindx;
08112 int *ucrind;
08113 long double *uccoef;
08114 int *urindx;
08115 int *urcind;
08116 long double *urcoef;
08117 int *lcindx;
08118 long double *lccoef;
08119 int *lrindx;
08120 long double *lrcoef;
08121 int *erindx;
08122 long double *ercoef;
08123 int *rperm;
08124 int *rrank;
08125 int *cperm;
08126 int *crank;
08127 ldbl_svector xtmp;
08128 int ur_freebeg;
08129 int ur_space;
08130 int uc_freebeg;
08131 int uc_space;
08132 int lc_freebeg;
08133 int lc_space;
08134 int lr_freebeg;
08135 int lr_space;
08136 int er_freebeg;
08137 int er_space;
08138
08139 int *p_nsing;
08140 int **p_singr;
08141 int **p_singc;
08142
08143 long double *dmat;
08144 int drows;
08145 int dcols;
08146 int dense_base;
08147 }
08148 ldbl_factor_work;
08149
08150 void ldbl_ILLfactor_init_factor_work (
08151 ldbl_factor_work * f),
08152 ldbl_ILLfactor_free_factor_work (
08153 ldbl_factor_work * f),
08154 ldbl_ILLfactor_ftran (
08155 ldbl_factor_work * f,
08156 ldbl_svector * a,
08157 ldbl_svector * x),
08158 ldbl_ILLfactor_ftran_update (
08159 ldbl_factor_work * f,
08160 ldbl_svector * a,
08161 ldbl_svector * upd,
08162 ldbl_svector * x),
08163 ldbl_ILLfactor_btran (
08164 ldbl_factor_work * f,
08165 ldbl_svector * a,
08166 ldbl_svector * x);
08167
08168 int ldbl_ILLfactor_create_factor_work (
08169 ldbl_factor_work * f,
08170 int dim),
08171 ldbl_ILLfactor_set_factor_iparam (
08172 ldbl_factor_work * f,
08173 int param,
08174 int val),
08175 ldbl_ILLfactor_set_factor_dparam (
08176 ldbl_factor_work * f,
08177 int param,
08178 long double val),
08179 ldbl_ILLfactor (
08180 ldbl_factor_work * f,
08181 int *basis,
08182 int *cbeg,
08183 int *clen,
08184 int *cindx,
08185 long double * ccoef,
08186 int *p_nsing,
08187 int **p_singr,
08188 int **p_singc),
08189 ldbl_ILLfactor_update (
08190 ldbl_factor_work * f,
08191 ldbl_svector * a,
08192 int col,
08193 int *p_refact);
08194
08195 #endif
08196 #endif
08197 #endif
08198 #ifdef HAVE_LONG_DOUBLE
08199 #if HAVE_LONG_DOUBLE
08200
08201
08202
08203
08204
08205
08206
08207
08208
08209
08210
08211
08212
08213
08214
08215
08216
08217
08218
08219
08220
08221
08222
08223 #ifndef ldbl___QS_LPDEFS_H
08224 #define ldbl___QS_LPDEFS_H
08225
08226
08227
08228 #define ldbl_INFTY ldbl_ILL_MAXDOUBLE
08229 #define ldbl_NINFTY ldbl_ILL_MINDOUBLE
08230
08231
08232
08233
08234 extern long double ldbl_PARAM_IBASIS_RPIVOT;
08235 extern long double ldbl_PARAM_IBASIS_RTRIANG;
08236 extern long double ldbl_PARAM_MIN_DNORM;
08237 extern long double ldbl_PFEAS_TOLER;
08238 extern long double ldbl_BD_TOLER;
08239 extern long double ldbl_DFEAS_TOLER;
08240 extern long double ldbl_PIVOT_TOLER;
08241 extern long double ldbl_SZERO_TOLER;
08242 extern long double ldbl_PIVZ_TOLER;
08243 extern long double ldbl_OBJBND_TOLER;
08244 extern long double ldbl_DBNDPIV_TOLER;
08245 extern long double ldbl_DBNDPIV_RATIO;
08246 extern long double ldbl_ALTPIV_TOLER;
08247
08248 extern long double ldbl_PROGRESS_ZERO;
08249 extern long double ldbl_PROGRESS_THRESH;
08250 extern long double ldbl_CB_EPS;
08251 extern long double ldbl_CB_INF_RATIO;
08252 extern long double ldbl_CB_PRI_RLIMIT;
08253
08254
08255 typedef struct
08256 {
08257 int ynz_cnt;
08258 int num_y;
08259 long double y_ravg;
08260 int znz_cnt;
08261 int num_z;
08262 long double z_ravg;
08263 int zanz_cnt;
08264 int num_za;
08265 long double za_ravg;
08266 int pnorm_cnt;
08267 int dnorm_cnt;
08268 int pinz_cnt;
08269 int num_pi;
08270 int pi1nz_cnt;
08271 int num_pi1;
08272 int upnz_cnt;
08273 int num_up;
08274 int pupv_cnt;
08275 int dupv_cnt;
08276
08277 int start_slacks;
08278 int final_slacks;
08279 int start_art;
08280 int final_art;
08281
08282 int pI_iter;
08283 int pII_iter;
08284 int dI_iter;
08285 int dII_iter;
08286 int tot_iter;
08287
08288 int pivpI[10];
08289 int pivpII[10];
08290 int pivdI[10];
08291 int pivdII[10];
08292 }
08293 ldbl_count_struct;
08294
08295
08296 typedef struct
08297 {
08298 long double pfeas_tol;
08299 long double dfeas_tol;
08300 long double pivot_tol;
08301 long double szero_tol;
08302 long double ip_tol;
08303 long double id_tol;
08304 }
08305 ldbl_tol_struct;
08306
08307
08308 typedef struct ldbl_bndinfo
08309 {
08310 long double pbound;
08311 long double cbound;
08312 int btype;
08313 int varnum;
08314 struct ldbl_bndinfo *next;
08315 }
08316 ldbl_bndinfo;
08317
08318
08319 typedef struct ldbl_coefinfo
08320 {
08321 long double pcoef;
08322 long double ccoef;
08323 int varnum;
08324 struct ldbl_coefinfo *next;
08325 }
08326 ldbl_coefinfo;
08327
08328
08329 typedef struct ldbl_feas_info
08330 {
08331 int pstatus;
08332 int dstatus;
08333 long double totinfeas;
08334 }
08335 ldbl_feas_info;
08336
08337 typedef struct ldbl_lp_status_info
08338 {
08339 char optimal;
08340 char primal_feasible;
08341 char primal_infeasible;
08342 char primal_unbounded;
08343 char dual_feasible;
08344 char dual_infeasible;
08345 char dual_unbounded;
08346 char padd;
08347 }
08348 ldbl_lp_status_info;
08349
08350 typedef struct ldbl_pI_uinfo
08351 {
08352 int tctr;
08353 int i;
08354 int *perm;
08355 int *ix;
08356 int fs;
08357 long double piv;
08358 long double *t;
08359 long double dty;
08360 long double c_obj;
08361 long double tz;
08362 }
08363 ldbl_pI_uinfo;
08364
08365 extern void ldbl_ILLlp_status_info_init (
08366 ldbl_lp_status_info * ls);
08367
08368
08369
08370
08371
08372
08373 typedef struct ldbl_lpinfo
08374 {
08375
08376 long double objval;
08377 long double pobjval;
08378 long double dobjval;
08379 long double pinfeas;
08380 long double dinfeas;
08381 long double objbound;
08382 ldbl_lp_status_info probstat;
08383 ldbl_lp_status_info basisstat;
08384 int nrows;
08385 int ncols;
08386 int *matcnt;
08387 int *matbeg;
08388 int *matind;
08389 long double *matval;
08390 int matfree;
08391 int matsize;
08392 long double *bz;
08393 long double *lz;
08394 long double *uz;
08395 long double *cz;
08396 int localrows;
08397 int *rowcnt;
08398 int *rowbeg;
08399 int *rowind;
08400 long double *rowval;
08401
08402 long double *xbz;
08403 long double *piz;
08404 long double *dz;
08405 long double *pIxbz;
08406 long double *pIpiz;
08407 long double *pIdz;
08408
08409 int final_phase;
08410 int infub_ix;
08411
08412 int basisid;
08413 int nnbasic;
08414 int *baz;
08415 int *nbaz;
08416 int *vstat;
08417 int *vindex;
08418 int fbasisid;
08419 ldbl_factor_work *f;
08420 int *vtype;
08421 char *vclass;
08422
08423 ldbl_svector zz;
08424 ldbl_svector yjz;
08425 ldbl_svector zA;
08426 ldbl_svector work;
08427 ldbl_svector srhs;
08428 ldbl_svector ssoln;
08429 int *iwork;
08430 ldbl_pI_uinfo upd;
08431 int *bfeas;
08432 int *dfeas;
08433
08434 ldbl_tol_struct *tol;
08435 ldbl_count_struct *cnts;
08436 int nbchange;
08437 int ncchange;
08438 ldbl_bndinfo *bchanges;
08439 ldbl_coefinfo *cchanges;
08440 int pIratio;
08441 int pIIratio;
08442 int dIratio;
08443 int dIIratio;
08444
08445 int maxiter;
08446 int iterskip;
08447 double maxtime;
08448 double starttime;
08449 struct ldbl_ILLlpdata *O;
08450 ILLrandstate rstate;
08451
08452 }
08453 ldbl_lpinfo;
08454
08455
08456 typedef struct
08457 {
08458 int ninit;
08459 long double *norms;
08460 int *refframe;
08461 }
08462 ldbl_p_devex_info;
08463
08464 typedef struct
08465 {
08466 long double *norms;
08467 }
08468 ldbl_p_steep_info;
08469
08470 typedef struct
08471 {
08472 int k;
08473 int cgroup;
08474 int ngroups;
08475 int *gstart;
08476 int *gshift;
08477 int *gsize;
08478 int bsize;
08479 int *bucket;
08480 int *perm;
08481 long double *infeas;
08482 }
08483 ldbl_mpart_info;
08484
08485 typedef struct
08486 {
08487 int ninit;
08488 long double *norms;
08489 int *refframe;
08490 }
08491 ldbl_d_devex_info;
08492
08493 typedef struct
08494 {
08495 long double *norms;
08496 }
08497 ldbl_d_steep_info;
08498
08499
08500 typedef struct ldbl_price_info
08501 {
08502 int p_strategy;
08503 int d_strategy;
08504 int pI_price;
08505 int pII_price;
08506 int dI_price;
08507 int dII_price;
08508 int cur_price;
08509 long double *p_scaleinf;
08510 long double *d_scaleinf;
08511 ldbl_p_devex_info pdinfo;
08512 ldbl_p_steep_info psinfo;
08513 ldbl_mpart_info pmpinfo;
08514 ldbl_d_devex_info ddinfo;
08515 ldbl_d_steep_info dsinfo;
08516 ldbl_mpart_info dmpinfo;
08517 ldbl_heap h;
08518 long double htrigger;
08519 int hineff;
08520 char init;
08521 }
08522 ldbl_price_info;
08523
08524 #endif
08525 #endif
08526 #endif
08527 #ifdef HAVE_LONG_DOUBLE
08528 #if HAVE_LONG_DOUBLE
08529
08530
08531
08532
08533
08534
08535
08536
08537
08538
08539
08540
08541
08542
08543
08544
08545
08546
08547
08548
08549
08550
08551
08552 #ifndef ldbl_LINE_READER_FILE_H
08553 #define ldbl_LINE_READER_FILE_H
08554
08555
08556
08557 typedef char *(
08558 *ldbl_qsread_line_fct) (
08559 char *s,
08560 int size,
08561 void *src);
08562
08563 typedef struct ldbl_qsline_reader
08564 {
08565 ldbl_qsread_line_fct read_line_fct;
08566 void *data_src;
08567 struct ldbl_qserror_collector *error_collector;
08568 }
08569 ldbl_qsline_reader;
08570
08571 ldbl_qsline_reader *ldbl_ILLline_reader_new (
08572 ldbl_qsread_line_fct fct,
08573 void *data_src);
08574 void ldbl_ILLline_reader_free (
08575 ldbl_qsline_reader * reader);
08576
08577 #define ldbl_ILLline_reader_get(s, size, reader) \
08578 (reader)->read_line_fct(s, size, (reader)->data_src)
08579
08580
08581
08582
08583
08584
08585
08586
08587
08588
08589
08590 #endif
08591 #endif
08592 #endif
08593 #ifdef HAVE_LONG_DOUBLE
08594 #if HAVE_LONG_DOUBLE
08595
08596
08597
08598
08599
08600
08601
08602
08603
08604
08605
08606
08607
08608
08609
08610
08611
08612
08613
08614
08615
08616
08617
08618 #ifndef ldbl_ILL_LPDATA_H
08619 #define ldbl_ILL_LPDATA_H
08620
08621
08622 extern long double ldbl_ILL_MAXDOUBLE;
08623 extern long double ldbl_ILL_MINDOUBLE;
08624
08625 #define ldbl_ILL_MAXINT (2147483647)
08626 #define ldbl_ILL_MIN (1)
08627 #define ldbl_ILL_MAX (-1)
08628
08629
08630
08631 #define ldbl_ILL_PRE_SCALE 1
08632 #define ldbl_ILL_PRE_FIXED 2
08633 #define ldbl_ILL_PRE_SINGLE_ROW 4
08634 #define ldbl_ILL_PRE_FORCING 8
08635 #define ldbl_ILL_PRE_SINGLE_COL 16
08636 #define ldbl_ILL_PRE_DUPLICATE_ROW 32
08637 #define ldbl_ILL_PRE_DUPLICATE_COL 64
08638 #define ldbl_ILL_PRE_EMPTY_COL 128
08639 #define ldbl_ILL_PRE_ALL (ldbl_ILL_PRE_SCALE | ldbl_ILL_PRE_FIXED | ldbl_ILL_PRE_SINGLE_ROW \
08640 ldbl_ILL_PRE_FORCING | ldbl_ILL_PRE_SINGLE_COL | ldbl_ILL_PRE_DUPLICATE_ROW \
08641 ldbl_ILL_PRE_DUPLICATE_COL | ldbl_ILL_PRE_EMPTY_COL)
08642 #define ldbl_ILL_PRE_SIMPLE (ldbl_ILL_PRE_FIXED | ldbl_ILL_PRE_EMPTY_COL)
08643
08644 typedef struct ldbl_ILLlpdata
08645 {
08646 int nrows;
08647 int ncols;
08648 int nstruct;
08649 int nzcount;
08650 int rowsize;
08651 int colsize;
08652 int structsize;
08653
08654 int objsense;
08655 char *sense;
08656 long double *obj;
08657 long double *rhs;
08658 long double *rangeval;
08659 long double *lower;
08660 long double *upper;
08661 ldbl_ILLmatrix A;
08662 struct ldbl_ILLlp_rows *rA;
08663
08664 char **rownames;
08665 ILLsymboltab rowtab;
08666 char *objname;
08667
08668
08669 char **colnames;
08670 ILLsymboltab coltab;
08671
08672 char *probname;
08673 char *intmarker;
08674 int *structmap;
08675 int *rowmap;
08676 struct ldbl_ILLlp_basis *basis;
08677 struct ldbl_ILLlp_predata *presolve;
08678 struct ldbl_ILLlp_sinfo *sinfo;
08679
08680
08681
08682
08683 ldbl_ILLmatrix sos;
08684
08685
08686
08687 char *sos_type;
08688 int *is_sos_mem;
08689
08690
08691
08692 char *refrowname;
08693 int refind;
08694
08695
08696
08697
08698
08699
08700
08701
08702 qsstring_reporter reporter;
08703
08704 }
08705 ldbl_ILLlpdata;
08706
08707 typedef struct ldbl_ILLlp_basis
08708 {
08709 int nstruct;
08710 int nrows;
08711 int rownorms_size;
08712 int colnorms_size;
08713 char *cstat;
08714 char *rstat;
08715 long double *rownorms;
08716 long double *colnorms;
08717 }
08718 ldbl_ILLlp_basis;
08719
08720 typedef struct ldbl_ILLlp_cache
08721 {
08722 int nstruct;
08723 int nrows;
08724 int status;
08725 long double val;
08726 long double *x;
08727 long double *pi;
08728 long double *rc;
08729 long double *slack;
08730 }
08731 ldbl_ILLlp_cache;
08732
08733 typedef struct ldbl_ILLlp_sinfo
08734 {
08735 int ncols;
08736 int nrows;
08737 int nzcount;
08738 int rowsize;
08739 int colsize;
08740 int objsense;
08741
08742 long double *obj;
08743 long double *rhs;
08744 long double *lower;
08745 long double *upper;
08746
08747 ldbl_ILLmatrix A;
08748
08749 char **colnames;
08750 }
08751 ldbl_ILLlp_sinfo;
08752
08753 typedef struct ldbl_ILLlp_preline
08754 {
08755 long double rhs;
08756 long double obj;
08757 long double lower;
08758 long double upper;
08759 int count;
08760 int *ind;
08761 int row_or_col;
08762 long double *val;
08763 }
08764 ldbl_ILLlp_preline;
08765
08766 typedef struct ldbl_ILLlp_preop
08767 {
08768 int ptype;
08769 int rowindex;
08770 int colindex;
08771 ldbl_ILLlp_preline line;
08772 }
08773 ldbl_ILLlp_preop;
08774
08775 typedef struct ldbl_ILLlp_predata
08776 {
08777 int opcount;
08778 int opsize;
08779 ldbl_ILLlp_preop *oplist;
08780 int r_nrows;
08781 int r_ncols;
08782 int *colmap;
08783 int *rowmap;
08784 long double *rowscale;
08785 long double *colscale;
08786 long double *colfixval;
08787 long double *rowfixval;
08788 }
08789 ldbl_ILLlp_predata;
08790
08791 typedef struct ldbl_ILLlp_rows
08792 {
08793 int *rowbeg;
08794 int *rowcnt;
08795 int *rowind;
08796 long double *rowval;
08797 }
08798 ldbl_ILLlp_rows;
08799
08800
08801
08802
08803
08804
08805
08806
08807 struct ldbl_qsdata *ldbl_ILLread (
08808 ldbl_qsline_reader * file,
08809 const char *ldbl_fname,
08810 int isMps);
08811 void ldbl_ILLstart (
08812 void);
08813
08814
08815
08816 void ldbl_ILLend (
08817 void);
08818
08819
08820 void ldbl_ILLchange_precision (
08821 void);
08822
08823
08824
08825
08826 void ldbl_ILLlpdata_init (
08827 ldbl_ILLlpdata * lp);
08828 void ldbl_ILLlpdata_free (
08829 ldbl_ILLlpdata * lp);
08830 void ldbl_ILLlp_basis_init (
08831 ldbl_ILLlp_basis * B);
08832 void ldbl_ILLlp_basis_free (
08833 ldbl_ILLlp_basis * B);
08834 void ldbl_ILLlp_cache_init (
08835 ldbl_ILLlp_cache * C);
08836 void ldbl_ILLlp_cache_free (
08837 ldbl_ILLlp_cache * C);
08838 int ldbl_ILLlp_basis_alloc (
08839 ldbl_ILLlp_basis * B,
08840 int ncols,
08841 int nrows);
08842 int ldbl_ILLlp_cache_alloc (
08843 ldbl_ILLlp_cache * C,
08844 int ncols,
08845 int nrows);
08846
08847 int ldbl_ILLlp_rows_init (
08848 ldbl_ILLlp_rows * lp_rows,
08849 ldbl_ILLlpdata * lp,
08850 int include_logicals);
08851 void ldbl_ILLlp_rows_clear (
08852 ldbl_ILLlp_rows * lp_rows);
08853 int ldbl_ILLprint_report (
08854 ldbl_ILLlpdata * lp,
08855 const char *format,
08856 ...);
08857
08858
08859
08860
08861
08862
08863
08864
08865
08866 void ldbl_ILLlp_sinfo_init (
08867 ldbl_ILLlp_sinfo * sinfo),
08868 ldbl_ILLlp_sinfo_free (
08869 ldbl_ILLlp_sinfo * sinfo),
08870 ldbl_ILLlp_predata_init (
08871 ldbl_ILLlp_predata * pre),
08872 ldbl_ILLlp_predata_free (
08873 ldbl_ILLlp_predata * pre);
08874
08875 int ldbl_ILLlp_add_logicals (
08876 ldbl_ILLlpdata * lp),
08877 ldbl_ILLlp_scale (
08878 ldbl_ILLlpdata * lp),
08879 ldbl_ILLlp_presolve (
08880 ldbl_ILLlpdata * lp,
08881 int pre_types);
08882
08883
08884
08885
08886
08887 extern int ldbl___QSEX_SETUP;
08888
08889 #endif
08890 #endif
08891 #endif
08892 #ifdef HAVE_LONG_DOUBLE
08893 #if HAVE_LONG_DOUBLE
08894
08895
08896
08897
08898
08899
08900
08901
08902
08903
08904
08905
08906
08907
08908
08909
08910
08911
08912
08913
08914
08915
08916
08917 #ifndef ldbl___BASIS_H
08918 #define ldbl___BASIS_H
08919
08920
08921 #if 0
08922 #if EGLPNUM_TYPE != DBL_TYPE && EGLPNUM_TYPE != LDBL_TYPE
08923 extern long double ldbl_CB_PRI_RLIMIT;
08924 extern long double ldbl_CB_INF_RATIO;
08925 extern long double ldbl_CB_EPS;
08926 #endif
08927 #endif
08928
08929 typedef struct ldbl_var_data
08930 {
08931 int nartif;
08932 int nslacks;
08933 int nfree;
08934 int nbndone;
08935 int nbounded;
08936 int nfixed;
08937 long double cmax;
08938 }
08939 ldbl_var_data;
08940
08941 void ldbl_ILLbasis_init_vardata (
08942 ldbl_var_data * vd);
08943 void ldbl_ILLbasis_clear_vardata (
08944 ldbl_var_data * vd);
08945
08946 int ldbl_ILLbasis_build_basisinfo (
08947 ldbl_lpinfo * lp),
08948 ldbl_ILLbasis_get_initial (
08949 ldbl_lpinfo * lp,
08950 int algorithm),
08951 ldbl_ILLbasis_get_cinitial (
08952 ldbl_lpinfo * lp,
08953 int algorithm),
08954 ldbl_ILLbasis_load (
08955 ldbl_lpinfo * lp,
08956 ldbl_ILLlp_basis * B),
08957 ldbl_ILLbasis_tableau_row (
08958 ldbl_lpinfo * lp,
08959 int row,
08960 long double * brow,
08961 long double * trow,
08962 long double * rhs,
08963 int strict),
08964 ldbl_ILLbasis_factor (
08965 ldbl_lpinfo * lp,
08966 int *singular),
08967 ldbl_ILLbasis_refactor (
08968 ldbl_lpinfo * lp),
08969 ldbl_ILLbasis_update (
08970 ldbl_lpinfo * lp,
08971 ldbl_svector * y,
08972 int lindex,
08973 int *refactor,
08974 int *singular);
08975
08976 void ldbl_ILLbasis_column_solve (
08977 ldbl_lpinfo * lp,
08978 ldbl_svector * rhs,
08979 ldbl_svector * soln),
08980 ldbl_ILLbasis_column_solve_update (
08981 ldbl_lpinfo * lp,
08982 ldbl_svector * rhs,
08983 ldbl_svector * upd,
08984 ldbl_svector * soln),
08985 ldbl_ILLbasis_row_solve (
08986 ldbl_lpinfo * lp,
08987 ldbl_svector * rhs,
08988 ldbl_svector * soln),
08989 ldbl_ILLbasis_free_basisinfo (
08990 ldbl_lpinfo * lp),
08991 ldbl_ILLbasis_free_fbasisinfo (
08992 ldbl_lpinfo * lp),
08993 ldbl_ILLbasis_init_basisinfo (
08994 ldbl_lpinfo * lp);
08995
08996 #endif
08997 #endif
08998 #endif
08999 #ifdef HAVE_LONG_DOUBLE
09000 #if HAVE_LONG_DOUBLE
09001
09002
09003
09004
09005
09006
09007
09008
09009
09010
09011
09012
09013
09014
09015
09016
09017
09018
09019
09020
09021
09022
09023 #ifndef ldbl___DHEAPS_I_H__
09024 #define ldbl___DHEAPS_I_H__
09025
09026
09027
09028
09029
09030
09031 typedef struct ldbl_ILLdheap
09032 {
09033 long double *key;
09034 int *entry;
09035 int *loc;
09036 int total_space;
09037 int size;
09038 }
09039 ldbl_ILLdheap;
09040
09041 void ldbl_ILLutil_dheap_free (
09042 ldbl_ILLdheap * h),
09043 ldbl_ILLutil_dheap_delete (
09044 ldbl_ILLdheap * h,
09045 int i),
09046 ldbl_ILLutil_dheap_changekey (
09047 ldbl_ILLdheap * h,
09048 int i,
09049 long double * newkey),
09050 ldbl_ILLutil_dheap_findmin (
09051 ldbl_ILLdheap * h,
09052 int *i),
09053 ldbl_ILLutil_dheap_deletemin (
09054 ldbl_ILLdheap * h,
09055 int *i);
09056
09057 int ldbl_ILLutil_dheap_init (
09058 ldbl_ILLdheap * h,
09059 int k),
09060 ldbl_ILLutil_dheap_resize (
09061 ldbl_ILLdheap * h,
09062 int newsize),
09063 ldbl_ILLutil_dheap_insert (
09064 ldbl_ILLdheap * h,
09065 int i);
09066
09067
09068
09069 #endif
09070 #endif
09071 #endif
09072 #ifdef HAVE_LONG_DOUBLE
09073 #if HAVE_LONG_DOUBLE
09074
09075
09076
09077
09078
09079
09080
09081
09082
09083
09084
09085
09086
09087
09088
09089
09090
09091
09092
09093
09094
09095
09096
09097 #ifndef ldbl___QS_QSOPT_H
09098 #define ldbl___QS_QSOPT_H
09099
09100
09101 #ifdef WIN32
09102
09103 #ifdef QSLIB_EXPORTS
09104 #define ldbl_QSLIB_INTERFACE __declspec(dllexport)
09105 #else
09106 #define ldbl_QSLIB_INTERFACE __declspec(dllimport)
09107 #endif
09108
09109 #else
09110 #define ldbl_QSLIB_INTERFACE extern
09111 #endif
09112
09113 #ifdef WIN32
09114 typedef struct ldbl_QSLIB_INTERFACE ldbl_qsdata *ldbl_QSprob;
09115 typedef struct ldbl_QSLIB_INTERFACE qsbasis *ldbl_QSbas;
09116 #else
09117 typedef struct ldbl_qsdata *ldbl_QSprob;
09118 typedef struct qsbasis *ldbl_QSbas;
09119 #endif
09120
09121
09122
09123
09124
09125
09126
09127
09128
09129
09130
09131
09132
09133
09134
09135
09136
09137
09138
09139
09140 #ifdef __cplusplus
09141 extern "C"
09142 {
09143 #endif
09144
09145 #ifdef WIN32
09146
09147
09148
09149
09150 ldbl_QSLIB_INTERFACE int ldbl_solver_main ( int argc, char **argv);
09151 ldbl_QSLIB_INTERFACE int ldbl_reader_main ( int argc, char **argv);
09152 #endif
09153
09154 ldbl_QSLIB_INTERFACE void ldbl_QSfree ( void *ptr),
09155 ldbl_QSfree_prob ( ldbl_QSprob p),
09156 ldbl_QSfree_basis ( ldbl_QSbas B),
09157 ldbl_QSset_precision ( const unsigned prec),
09158
09159
09160 ldbl_QSstart ( void),
09161
09162
09163 ldbl_QSend ( void);
09164
09165
09166 ldbl_QSLIB_INTERFACE int ldbl_QSopt_primal ( ldbl_QSprob p, int *status),
09167 ldbl_QSopt_dual ( ldbl_QSprob p, int *status),
09168 ldbl_QSopt_pivotin_col ( ldbl_QSprob p, int ccnt, int *clist),
09169 ldbl_QSopt_pivotin_row ( ldbl_QSprob p, int rcnt, int *rlist),
09170 ldbl_QSopt_strongbranch ( ldbl_QSprob p, int ncand, int *candidatelist,
09171 long double * xlist, long double * down_vals, long double * up_vals,
09172 int iterations, long double objbound),
09173 ldbl_QSchange_objsense ( ldbl_QSprob p, int newsense),
09174 ldbl_QSget_objsense ( ldbl_QSprob p, int *newsense),
09175 ldbl_QSnew_col ( ldbl_QSprob p,const long double obj,const long double lower,const long double upper,
09176 const char *name),
09177 ldbl_QSadd_cols ( ldbl_QSprob p, int num, int *cmatcnt, int *cmatbeg, int *cmatind,
09178 long double * cmatval, long double * obj, long double * lower,
09179 long double * upper, const char **names),
09180 ldbl_QSadd_col ( ldbl_QSprob p, int cnt, int *cmatind, long double * cmatval,
09181 long double obj, long double lower, long double upper, const char *name),
09182 ldbl_QSnew_row ( ldbl_QSprob p,const long double rhs, int sense, const char *name),
09183 ldbl_QSadd_ranged_rows ( ldbl_QSprob p, int num, int *rmatcnt, int *rmatbeg,
09184 int *rmatind,const long double * rmatval,const long double * rhs, char *sense,
09185 const long double* range, const char **names),
09186 ldbl_QSadd_ranged_row ( ldbl_QSprob p, int cnt, int *rmatind,const long double * rmatval,
09187 const long double * rhs, int sense,const long double * range, const char *name),
09188 ldbl_QSadd_rows ( ldbl_QSprob p, int num, int *rmatcnt, int *rmatbeg, int *rmatind,
09189 const long double * rmatval,const long double * rhs, char *sense, const char **names),
09190 ldbl_QSadd_row ( ldbl_QSprob p, int cnt, int *rmatind,const long double * rmatval,
09191 const long double * rhs, int sense, const char *name),
09192 ldbl_QSdelete_rows ( ldbl_QSprob p, int num, int *dellist),
09193 ldbl_QSdelete_row ( ldbl_QSprob p, int rowindex),
09194 ldbl_QSdelete_setrows ( ldbl_QSprob p, int *flags),
09195 ldbl_QSdelete_named_row ( ldbl_QSprob p, const char *rowname),
09196 ldbl_QSdelete_named_rows_list ( ldbl_QSprob p, int num, const char **rownames),
09197 ldbl_QSdelete_cols ( ldbl_QSprob p, int num, int *dellist),
09198 ldbl_QSdelete_col ( ldbl_QSprob p, int colindex),
09199 ldbl_QSdelete_setcols ( ldbl_QSprob p, int *flags),
09200 ldbl_QSdelete_named_column ( ldbl_QSprob p, const char *colname),
09201 ldbl_QSdelete_named_columns_list ( ldbl_QSprob p, int num, const char **colnames),
09202 ldbl_QSchange_senses ( ldbl_QSprob p, int num, int *rowlist, char *sense),
09203 ldbl_QSchange_sense ( ldbl_QSprob p, int rowindex, int sense),
09204 ldbl_QSchange_coef ( ldbl_QSprob p, int rowindex, int colindex, long double coef),
09205 ldbl_QSchange_objcoef ( ldbl_QSprob p, int indx, long double coef),
09206 ldbl_QSchange_rhscoef ( ldbl_QSprob p, int indx, long double coef),
09207 ldbl_QSchange_range(ldbl_QSprob p, int rowindex, long double range),
09208 ldbl_QSchange_bounds ( ldbl_QSprob p, int num, int *collist, char *lu,
09209 const long double * bounds),
09210 ldbl_QSchange_bound ( ldbl_QSprob p, int indx, int lu,const long double bound),
09211 ldbl_QSload_basis ( ldbl_QSprob p, ldbl_QSbas B),
09212 ldbl_QSread_and_load_basis ( ldbl_QSprob p, const char *filename),
09213 ldbl_QSload_basis_array ( ldbl_QSprob p, char *cstat, char *rstat),
09214 ldbl_QSload_basis_and_row_norms_array ( ldbl_QSprob p, char *cstat, char *rstat,
09215 long double * rownorms),
09216 ldbl_QSget_basis_array ( ldbl_QSprob p, char *cstat, char *rstat),
09217 ldbl_QSget_basis_and_row_norms_array ( ldbl_QSprob p, char *cstat, char *rstat,
09218 long double * rownorms),
09219 ldbl_QSget_binv_row ( ldbl_QSprob p, int indx, long double * binvrow),
09220 ldbl_QSget_tableau_row ( ldbl_QSprob p, int indx, long double * tableaurow),
09221 ldbl_QSget_basis_order ( ldbl_QSprob p, int *basorder),
09222 ldbl_QSget_coef (ldbl_QSprob p, int rowindex, int colindex, long double*coef),
09223 ldbl_QSget_status ( ldbl_QSprob p, int *status),
09224 ldbl_QSget_solution ( ldbl_QSprob p, long double * value, long double * x,
09225 long double * pi, long double * slack, long double * rc),
09226 ldbl_QSget_objval ( ldbl_QSprob p, long double * value),
09227 ldbl_QSget_pi_array ( ldbl_QSprob p, long double * pi),
09228 ldbl_QSget_rc_array ( ldbl_QSprob p, long double * rc),
09229 ldbl_QSget_x_array ( ldbl_QSprob p, long double * x),
09230 ldbl_QSget_slack_array ( ldbl_QSprob p, long double * slack),
09231 ldbl_QSget_infeas_array ( ldbl_QSprob p, long double * pi),
09232 ldbl_QSget_colcount ( ldbl_QSprob p),
09233 ldbl_QSget_rowcount ( ldbl_QSprob p),
09234 ldbl_QSget_nzcount ( ldbl_QSprob p),
09235 ldbl_QSget_obj_list(ldbl_QSprob p, int num, int*collist, long double*obj),
09236 ldbl_QSget_obj ( ldbl_QSprob p, long double * obj),
09237 ldbl_QSget_rhs ( ldbl_QSprob p, long double * rhs),
09238 ldbl_QSget_ranged_rows_list ( ldbl_QSprob p, int num, int *rowlist, int **rowcnt,
09239 int **rowbeg, int **rowind, long double ** rowval, long double ** rhs,
09240 char **sense, long double **range, char ***names),
09241 ldbl_QSget_ranged_rows ( ldbl_QSprob p, int **rowcnt, int **rowbeg, int **rowind,
09242 long double ** rowval, long double ** rhs, char **sense,
09243 long double ** range, char ***names),
09244 ldbl_QSget_senses ( ldbl_QSprob p, char*senses),
09245 ldbl_QSget_rows_list ( ldbl_QSprob p, int num, int *rowlist, int **rowcnt,
09246 int **rowbeg, int **rowind, long double ** rowval, long double ** rhs,
09247 char **sense, char ***names),
09248 ldbl_QSget_rows ( ldbl_QSprob p, int **rowcnt, int **rowbeg, int **rowind,
09249 long double ** rowval, long double ** rhs, char **sense, char ***names),
09250 ldbl_QSget_columns_list ( ldbl_QSprob p, int num, int *collist, int **colcnt,
09251 int **colbeg, int **colind, long double ** colval, long double ** obj,
09252 long double ** lower, long double ** upper, char ***names),
09253 ldbl_QSget_columns ( ldbl_QSprob p, int **colcnt, int **colbeg, int **colind,
09254 long double ** colval, long double ** obj, long double ** lower,
09255 long double ** upper, char ***names),
09256 ldbl_QSget_rownames ( ldbl_QSprob p, char **rownames),
09257 ldbl_QSget_colnames ( ldbl_QSprob p, char **colnames),
09258 ldbl_QSget_bound ( ldbl_QSprob p, int colindex, int lu, long double * bound),
09259 ldbl_QSget_bounds ( ldbl_QSprob p, long double * lower, long double * upper),
09260 ldbl_QSget_bounds_list(ldbl_QSprob p, int num, int*collist, long double*lb,
09261 long double*ub),
09262 ldbl_QSget_intflags ( ldbl_QSprob p, int *intflags),
09263 ldbl_QSget_intcount ( ldbl_QSprob p, int *count),
09264 ldbl_QSget_column_index ( ldbl_QSprob p, const char *name, int *colindex),
09265 ldbl_QSget_row_index ( ldbl_QSprob p, const char *name, int *rowindex),
09266 ldbl_QSget_named_x ( ldbl_QSprob p, const char *colname, long double * val),
09267 ldbl_QSget_named_rc ( ldbl_QSprob p, const char *colname, long double * val),
09268 ldbl_QSget_named_pi ( ldbl_QSprob p, const char *rowname, long double * val),
09269 ldbl_QSget_named_slack ( ldbl_QSprob p, const char *rowname, long double * val),
09270 ldbl_QScompute_row_norms ( ldbl_QSprob p),
09271 ldbl_QSwrite_prob ( ldbl_QSprob p, const char *filename, const char *filetype),
09272 ldbl_QSwrite_prob_file ( ldbl_QSprob p, FILE * file, const char *filetype),
09273 ldbl_QSwrite_basis ( ldbl_QSprob p, ldbl_QSbas B, const char *filename),
09274 ldbl_QStest_row_norms ( ldbl_QSprob p),
09275 ldbl_QSget_itcnt(ldbl_QSprob p, int *pI_iter, int *pII_iter, int *dI_iter,
09276 int *dII_iter, int *tot_iter),
09277 ldbl_QSset_param ( ldbl_QSprob p, int whichparam, int newvalue),
09278 ldbl_QSset_param_EGlpNum ( ldbl_QSprob p, int whichparam, long double newvalue),
09279 ldbl_QSget_param ( ldbl_QSprob p, int whichparam, int *value),
09280 ldbl_QSget_param_EGlpNum ( ldbl_QSprob p, int whichparam, long double * value);
09281
09282 ldbl_QSLIB_INTERFACE char *ldbl_QSget_probname ( ldbl_QSprob p);
09283 ldbl_QSLIB_INTERFACE char *ldbl_QSget_objname ( ldbl_QSprob p);
09284 ldbl_QSLIB_INTERFACE char *ldbl_QSversion ( void);
09285
09286 ldbl_QSLIB_INTERFACE ldbl_QSprob ldbl_QScreate_prob ( const char *name, int objsense),
09287 ldbl_QSread_prob ( const char *filename, const char *filetype),
09288 ldbl_QSload_prob ( const char *probname, int ncols, int nrows, int *cmatcnt,
09289 int *cmatbeg, int *cmatind, long double * cmatval, int objsense,
09290 long double * obj, long double * rhs, char *sense, long double * lower,
09291 long double * upper, const char **colnames, const char **rownames),
09292 ldbl_QScopy_prob ( ldbl_QSprob p, const char *newname);
09293
09294 ldbl_QSLIB_INTERFACE ldbl_QSbas ldbl_QSget_basis ( ldbl_QSprob p),
09295 ldbl_QSread_basis ( ldbl_QSprob p, const char *filename);
09296
09297 #ifdef __cplusplus
09298 }
09299 #endif
09300
09301
09302
09303
09304
09305
09306
09307
09308
09309
09310
09311
09312
09313
09314
09315
09316
09317
09318 #ifdef WIN32
09319 typedef struct ldbl_QSLIB_INTERFACE ldbl_qsline_reader *ldbl_QSline_reader;
09320 typedef struct ldbl_QSLIB_INTERFACE ldbl_qsformat_error *ldbl_QSformat_error;
09321 typedef struct ldbl_QSLIB_INTERFACE ldbl_qserror_collector *ldbl_QSerror_collector;
09322 typedef struct ldbl_QSLIB_INTERFACE ldbl_qserror_memory *ldbl_QSerror_memory;
09323 #else
09324 typedef struct ldbl_qsline_reader *ldbl_QSline_reader;
09325 typedef struct ldbl_qsformat_error *ldbl_QSformat_error;
09326 typedef struct ldbl_qserror_collector *ldbl_QSerror_collector;
09327 typedef struct ldbl_qserror_memory *ldbl_QSerror_memory;
09328 #endif
09329
09330 #ifdef __cplusplus
09331 extern "C"
09332 {
09333 #endif
09334 ldbl_QSLIB_INTERFACE const char *ldbl_QSformat_error_type_string (
09335 int tp);
09336
09337 ldbl_QSLIB_INTERFACE int ldbl_QSerror_get_type (
09338 ldbl_QSformat_error error);
09339 ldbl_QSLIB_INTERFACE const char *ldbl_QSerror_get_desc (
09340 ldbl_QSformat_error error);
09341 ldbl_QSLIB_INTERFACE int ldbl_QSerror_get_line_number (
09342 ldbl_QSformat_error error);
09343 ldbl_QSLIB_INTERFACE int ldbl_QSerror_get_pos (
09344 ldbl_QSformat_error error);
09345 ldbl_QSLIB_INTERFACE const char *ldbl_QSerror_get_line (
09346 ldbl_QSformat_error error);
09347 ldbl_QSLIB_INTERFACE void ldbl_QSerror_print (
09348 FILE * f,
09349 ldbl_QSformat_error error);
09350
09351 ldbl_QSLIB_INTERFACE ldbl_QSerror_collector ldbl_QSerror_collector_new (
09352 void *fct,
09353 void *dest);
09354 ldbl_QSLIB_INTERFACE ldbl_QSerror_collector ldbl_QSerror_memory_collector_new (
09355 ldbl_QSerror_memory mem);
09356 ldbl_QSLIB_INTERFACE void ldbl_QSerror_collector_free (
09357 ldbl_QSerror_collector c);
09358
09359
09360
09361
09362 ldbl_QSLIB_INTERFACE ldbl_QSline_reader ldbl_QSline_reader_new (
09363 void *fct,
09364 void *data_src);
09365
09366
09367 ldbl_QSLIB_INTERFACE void ldbl_QSline_reader_free (
09368 ldbl_QSline_reader reader);
09369
09370 ldbl_QSLIB_INTERFACE void ldbl_QSline_reader_set_error_collector (
09371 ldbl_QSline_reader reader,
09372 ldbl_QSerror_collector collector);
09373
09374 ldbl_QSLIB_INTERFACE char *ldbl_QSline_reader_get (
09375 ldbl_QSline_reader reader,
09376 char *s,
09377 int size);
09378
09379 ldbl_QSLIB_INTERFACE ldbl_QSprob ldbl_QSget_prob (
09380 ldbl_QSline_reader reader,
09381 const char *probname,
09382 const char *filetype);
09383
09384
09385
09386
09387
09388
09389
09390 ldbl_QSLIB_INTERFACE ldbl_QSerror_memory ldbl_QSerror_memory_create (
09391 int takeErrorLines);
09392 ldbl_QSLIB_INTERFACE void ldbl_QSerror_memory_free (
09393 ldbl_QSerror_memory mem);
09394
09395 ldbl_QSLIB_INTERFACE int ldbl_QSerror_memory_get_nof (
09396 ldbl_QSerror_memory mem,
09397 int error_type);
09398 ldbl_QSLIB_INTERFACE int ldbl_QSerror_memory_get_nerrors (
09399 ldbl_QSerror_memory mem);
09400
09401 ldbl_QSLIB_INTERFACE ldbl_QSformat_error ldbl_QSerror_memory_get_last_error (
09402 ldbl_QSerror_memory mem);
09403 ldbl_QSLIB_INTERFACE ldbl_QSformat_error ldbl_QSerror_memory_get_prev_error (
09404 ldbl_QSformat_error e);
09405
09406
09407
09408
09409 ldbl_QSLIB_INTERFACE void ldbl_QSset_reporter (
09410 ldbl_QSprob prob,
09411 int iterskip,
09412 void *fct,
09413 void *dest);
09414
09415 ldbl_QSLIB_INTERFACE int ldbl_QSreport_prob (
09416 ldbl_QSprob p,
09417 const char *filetype,
09418 ldbl_QSerror_collector c);
09419
09420 #ifdef __cplusplus
09421 }
09422 #endif
09423 #endif
09424 #endif
09425 #endif
09426 #ifdef HAVE_LONG_DOUBLE
09427 #if HAVE_LONG_DOUBLE
09428
09429
09430
09431
09432
09433
09434
09435
09436
09437
09438
09439
09440
09441
09442
09443
09444
09445
09446
09447
09448
09449
09450
09451 #ifndef ldbl_QS_FORMAT_ERROR_H
09452 #define ldbl_QS_FORMAT_ERROR_H
09453
09454
09455
09456
09457
09458
09459
09460
09461
09462
09463
09464
09465
09466
09467
09468
09469
09470
09471
09472
09473
09474
09475
09476
09477
09478
09479
09480
09481
09482 typedef struct ldbl_qsformat_error
09483 {
09484 char *desc;
09485 char *theLine;
09486 struct ldbl_qsformat_error *next;
09487 int type;
09488 int lineNumber;
09489 int at;
09490 }
09491 ldbl_qsformat_error;
09492
09493 extern int ldbl_ILLformat_error_create (
09494 ldbl_qsformat_error * error,
09495 int mode,
09496 const char *desc,
09497 int lineNum,
09498 const char *theLine,
09499 int atPos);
09500 extern void ldbl_ILLformat_error_delete (
09501 ldbl_qsformat_error * error);
09502
09503 extern void ldbl_ILLformat_error_print (
09504 EGioFile_t * out,
09505 ldbl_qsformat_error * e);
09506
09507
09508
09509
09510
09511
09512
09513
09514
09515 typedef int (
09516 *ldbl_qsadd_error_fct) (
09517 void *dest,
09518 const ldbl_qsformat_error * error);
09519
09520 typedef struct ldbl_qserror_collector
09521 {
09522 ldbl_qsadd_error_fct add_error;
09523 void *dest;
09524 }
09525 ldbl_qserror_collector;
09526
09527 typedef struct ldbl_qserror_memory
09528 {
09529 unsigned int nerror;
09530 ldbl_qsformat_error *error_list;
09531 char has_error[QS_INPUT_NERROR];
09532 char hasErrorLines;
09533 }
09534 ldbl_qserror_memory;
09535
09536
09537 extern ldbl_qserror_collector *ldbl_ILLerror_collector_new (
09538 ldbl_qsadd_error_fct fct,
09539 void *dest);
09540
09541 ldbl_qserror_collector *ldbl_ILLerror_memory_collector_new (
09542 ldbl_qserror_memory * dest);
09543
09544 extern void ldbl_ILLerror_collector_free (
09545 ldbl_qserror_collector * c);
09546
09547 #define ldbl_ILLformat_error(collector, error) \
09548 ((collector)->add_error((collector)->dest, error))
09549
09550
09551 extern int ldbl_ILLadd_error_to_memory (
09552 void *dest,
09553 const ldbl_qsformat_error * error);
09554
09555 extern ldbl_qserror_memory *ldbl_ILLerror_memory_create (
09556 int takeErrorLines);
09557 extern void ldbl_ILLerror_memory_free (
09558 ldbl_qserror_memory * mem);
09559
09560 #endif
09561 #endif
09562 #endif
09563 #ifdef HAVE_LONG_DOUBLE
09564 #if HAVE_LONG_DOUBLE
09565
09566
09567
09568
09569
09570
09571
09572
09573
09574
09575
09576
09577
09578
09579
09580
09581
09582
09583
09584
09585
09586
09587
09588 #ifndef ldbl___ILL_RAWLP_H_
09589 #define ldbl___ILL_RAWLP_H_
09590
09591
09592
09593
09594
09595
09596
09597
09598
09599 #define ldbl_ILL_ISBLANK(p) \
09600 (((*(p))==' '||(*(p))=='\t'||(*(p))=='\r'||(*(p))=='\f') ? 1 : 0)
09601
09602
09603
09604
09605
09606
09607 typedef struct ldbl_rawlpdata
09608 {
09609 char *name;
09610
09611 char *rhsname;
09612 char *rangesname;
09613 char *boundsname;
09614
09615 int objsense;
09616 int objindex;
09617
09618 int nrows;
09619 ILLsymboltab rowtab;
09620
09621 int sensesize;
09622 char *rowsense;
09623
09624 char *rhsind;
09625
09626 int rhssize;
09627 long double *rhs;
09628 char *rangesind;
09629 struct ldbl_colptr *ranges;
09630
09631 int ncols;
09632 ILLsymboltab coltab;
09633 int colsize;
09634 struct ldbl_colptr **cols;
09635
09636 char *lbind;
09637 char *ubind;
09638 long double *lower;
09639 long double *upper;
09640
09641 int intsize;
09642 char *intmarker;
09643
09644
09645 char *refrow;
09646 int refrowind;
09647
09648 int is_sos_size;
09649 int *is_sos_member;
09650
09651
09652
09653 int nsos_member;
09654 int sos_weight_size;
09655 long double *sos_weight;
09656
09657 int sos_col_size;
09658 int *sos_col;
09659
09660 int nsos;
09661 int sos_setsize;
09662 struct ldbl_sosptr *sos_set;
09663
09664
09665 ldbl_qserror_collector *error_collector;
09666 ILLptrworld ptrworld;
09667 }
09668 ldbl_rawlpdata;
09669
09670 typedef struct ldbl_colptr
09671 {
09672 long double coef;
09673 struct ldbl_colptr *next;
09674 int this_val;
09675 }
09676 ldbl_colptr;
09677 extern ldbl_colptr *ldbl_ILLcolptralloc (
09678 ILLptrworld * p);
09679
09680 typedef struct ldbl_sosptr
09681 {
09682 int nelem;
09683 int first;
09684 char type;
09685 }
09686 ldbl_sosptr;
09687 extern const int ldbl_ILL_SOS_TYPE1;
09688 extern const int ldbl_ILL_SOS_TYPE2;
09689
09690 extern void ldbl_ILLinit_rawlpdata (
09691 ldbl_rawlpdata * lp,
09692 ldbl_qserror_collector * collector);
09693 extern void ldbl_ILLfree_rawlpdata (
09694 ldbl_rawlpdata * lp);
09695 extern void ldbl_ILLraw_clear_matrix (
09696 ldbl_rawlpdata * lp);
09697
09698 extern const char *ldbl_ILLraw_rowname (
09699 ldbl_rawlpdata * lp,
09700 int i);
09701 extern const char *ldbl_ILLraw_colname (
09702 ldbl_rawlpdata * lp,
09703 int i);
09704
09705 extern int ldbl_ILLraw_add_col (
09706 ldbl_rawlpdata * lp,
09707 const char *name,
09708 int intmarker);
09709 extern int ldbl_ILLraw_add_row (
09710 ldbl_rawlpdata * lp,
09711 const char *name,
09712 int sense,
09713 const long double rhs);
09714
09715 extern int ldbl_ILLraw_add_col_coef (
09716 ldbl_rawlpdata * lp,
09717 int colind,
09718 int rowind,
09719 long double coef);
09720
09721 extern int ldbl_ILLraw_init_ranges (
09722 ldbl_rawlpdata * lp);
09723 extern int ldbl_ILLraw_init_rhs (
09724 ldbl_rawlpdata * lp);
09725
09726 extern int ldbl_ILLraw_add_ranges_coef (
09727 ldbl_rawlpdata * lp,
09728 int rowind,
09729 long double coef);
09730
09731
09732 extern int ldbl_ILLraw_add_sos (
09733 ldbl_rawlpdata * lp,
09734 int sos_type);
09735
09736
09737 extern int ldbl_ILLraw_add_sos_member (
09738 ldbl_rawlpdata * lp,
09739 int colind);
09740
09741
09742 extern int ldbl_ILLraw_is_mem_other_sos (
09743 ldbl_rawlpdata * lp,
09744 int colind);
09745
09746 extern int ldbl_ILLraw_set_rhs_name (
09747 ldbl_rawlpdata * lp,
09748 const char *name,
09749 int *skip);
09750 extern int ldbl_ILLraw_set_bounds_name (
09751 ldbl_rawlpdata * lp,
09752 const char *name,
09753 int *skip);
09754 extern int ldbl_ILLraw_set_ranges_name (
09755 ldbl_rawlpdata * lp,
09756 const char *name,
09757 int *skip);
09758 extern void ldbl_ILLprint_rawlpdata (
09759 ldbl_rawlpdata * lp);
09760
09761 extern char *ldbl_ILLraw_unique_name (
09762 ILLsymboltab * tab,
09763 char *prefix,
09764 int i);
09765 extern int ldbl_ILLraw_fill_in_rownames (
09766 ldbl_rawlpdata * lp);
09767
09768 extern int ldbl_ILLraw_init_bounds (
09769 ldbl_rawlpdata * lp);
09770
09771 extern const char *ldbl_ILLraw_set_lowerBound (
09772 ldbl_rawlpdata * lp,
09773 int i,
09774 long double bnd);
09775 extern const char *ldbl_ILLraw_set_upperBound (
09776 ldbl_rawlpdata * lp,
09777 int i,
09778 long double bnd);
09779 extern const char *ldbl_ILLraw_set_fixedBound (
09780 ldbl_rawlpdata * lp,
09781 int i,
09782 long double bnd);
09783 extern const char *ldbl_ILLraw_set_binaryBound (
09784 ldbl_rawlpdata * lp,
09785 int i);
09786 extern const char *ldbl_ILLraw_set_unbound (
09787 ldbl_rawlpdata * lp,
09788 int colind);
09789 extern int ldbl_ILLraw_fill_in_bounds (
09790 ldbl_rawlpdata * lp);
09791
09792 extern int ldbl_ILLraw_first_nondefault_bound (
09793 ldbl_ILLlpdata * lp);
09794 extern int ldbl_ILLraw_default_lower (
09795 ldbl_ILLlpdata * lp,
09796 int i);
09797 extern int ldbl_ILLraw_default_upper (
09798 ldbl_ILLlpdata * lp,
09799 int i,
09800 int ri);
09801
09802 extern int ldbl_ILLrawlpdata_to_lpdata (
09803 ldbl_rawlpdata * raw,
09804 ldbl_ILLlpdata * lp);
09805
09806 extern int ldbl_ILLdata_error (
09807 ldbl_qserror_collector * collector,
09808 const char *format,
09809 ...);
09810 extern void ldbl_ILLdata_warn (
09811 ldbl_qserror_collector * collector,
09812 const char *format,
09813 ...);
09814
09815 #endif
09816 #endif
09817 #endif
09818 #ifdef HAVE_LONG_DOUBLE
09819 #if HAVE_LONG_DOUBLE
09820
09821
09822
09823
09824
09825
09826
09827
09828
09829
09830
09831
09832
09833
09834
09835
09836
09837
09838
09839
09840
09841
09842
09843 #ifndef ldbl_MPS_H
09844 #define ldbl_MPS_H
09845
09846
09847
09848
09849
09850
09851
09852 extern const char *ldbl_ILLmps_section_name[ILL_MPS_N_SECTIONS + 2];
09853
09854
09855 extern int ldbl_ILLread_mps (
09856 ldbl_qsline_reader * file,
09857 const char *filename,
09858 ldbl_rawlpdata * lp);
09859
09860 extern int ldbl_ILLwrite_mps (
09861 ldbl_ILLlpdata * lp,
09862 ldbl_qserror_collector * collector);
09863
09864
09865
09866 #endif
09867 #endif
09868 #endif
09869 #ifdef HAVE_LONG_DOUBLE
09870 #if HAVE_LONG_DOUBLE
09871
09872
09873
09874
09875
09876
09877
09878
09879
09880
09881
09882
09883
09884
09885
09886
09887
09888
09889
09890
09891
09892
09893
09894 #ifndef ldbl___PRICE_H
09895 #define ldbl___PRICE_H
09896
09897
09898 typedef struct ldbl_price_res
09899 {
09900 int eindex;
09901 int dir;
09902 int lindex;
09903 int lvstat;
09904 int price_stat;
09905 long double dinfeas;
09906 long double pinfeas;
09907 }
09908 ldbl_price_res;
09909
09910 int ldbl_ILLprice_test_for_heap (
09911 ldbl_lpinfo * const lp,
09912 ldbl_price_info * const pinf,
09913 int const nkeys,
09914 long double * keylist,
09915 int const algo,
09916 int const upd),
09917 ldbl_ILLprice_build_heap (
09918 ldbl_price_info * const pinf,
09919 int const nkeys,
09920 long double * keylist),
09921 ldbl_ILLprice_build_pricing_info (
09922 ldbl_lpinfo * const lp,
09923 ldbl_price_info * const pinf,
09924 int const phase),
09925 ldbl_ILLprice_update_pricing_info (
09926 ldbl_lpinfo * const lp,
09927 ldbl_price_info * const pinf,
09928 int const phase,
09929 ldbl_svector * const wz,
09930 int const eindex,
09931 int const lindex,
09932 long double y),
09933 ldbl_ILLprice_get_price (
09934 ldbl_price_info * const p,
09935 int const phase),
09936 ldbl_ILLprice_build_mpartial_info (
09937 ldbl_lpinfo * const lp,
09938 ldbl_price_info * const pinf,
09939 int const pricetype),
09940 ldbl_ILLprice_build_pdevex_norms (
09941 ldbl_lpinfo * const lp,
09942 ldbl_p_devex_info * const pdinfo,
09943 int const reinit),
09944 ldbl_ILLprice_update_pdevex_norms (
09945 ldbl_lpinfo * const lp,
09946 ldbl_p_devex_info * const pdinfo,
09947 int const eindex,
09948 long double yl),
09949 ldbl_ILLprice_build_psteep_norms (
09950 ldbl_lpinfo * const lp,
09951 ldbl_p_steep_info * const psinfo),
09952 ldbl_ILLprice_build_ddevex_norms (
09953 ldbl_lpinfo * const lp,
09954 ldbl_d_devex_info * const ddinfo,
09955 int const reinit),
09956 ldbl_ILLprice_update_ddevex_norms (
09957 ldbl_lpinfo * const lp,
09958 ldbl_d_devex_info * const ddinfo,
09959 int const eindex,
09960 long double yl),
09961 ldbl_ILLprice_build_dsteep_norms (
09962 ldbl_lpinfo * const lp,
09963 ldbl_d_steep_info * const dsinfo),
09964 ldbl_ILLprice_get_dsteep_norms (
09965 ldbl_lpinfo * const lp,
09966 int const count,
09967 int *constrowind,
09968 long double * const norms),
09969 ldbl_ILLprice_get_rownorms (
09970 ldbl_lpinfo * const lp,
09971 ldbl_price_info * const pinf,
09972 long double * const rnorms),
09973 ldbl_ILLprice_get_colnorms (
09974 ldbl_lpinfo * const lp,
09975 ldbl_price_info * const pinf,
09976 long double * const cnorms),
09977 ldbl_ILLprice_get_newnorms (
09978 ldbl_lpinfo * const lp,
09979 int const nelems,
09980 long double * const norms,
09981 int *const matcnt,
09982 int *const matbeg,
09983 int *const matind,
09984 long double * const matval,
09985 int const option),
09986 ldbl_ILLprice_get_new_rownorms (
09987 ldbl_lpinfo * const lp,
09988 int const newrows,
09989 long double * const rnorms,
09990 int *const rmatcnt,
09991 int *const rmatbeg,
09992 int *const rmatind,
09993 long double * const rmatval),
09994 ldbl_ILLprice_get_new_colnorms (
09995 ldbl_lpinfo * const lp,
09996 int const newrows,
09997 long double * const rnorms,
09998 int *const matcnt,
09999 int *const matbeg,
10000 int *const matind,
10001 long double * const matval),
10002 ldbl_ILLprice_load_rownorms (
10003 ldbl_lpinfo * const lp,
10004 long double * const rnorms,
10005 ldbl_price_info * const pinf),
10006 ldbl_ILLprice_load_colnorms (
10007 ldbl_lpinfo * const lp,
10008 long double * const cnorms,
10009 ldbl_price_info * const pinf);
10010
10011
10012 void ldbl_ILLprice_free_heap (
10013 ldbl_price_info * const pinf),
10014 ldbl_ILLprice_init_pricing_info (
10015 ldbl_price_info * const pinf),
10016 ldbl_ILLprice_free_pricing_info (
10017 ldbl_price_info * const pinf),
10018 ldbl_ILLprice_free_mpartial_info (
10019 ldbl_mpart_info * p),
10020 ldbl_ILLprice_init_mpartial_price (
10021 ldbl_lpinfo * const lp,
10022 ldbl_price_info * const pinf,
10023 int const phase,
10024 int const pricetype),
10025 ldbl_ILLprice_update_mpartial_price (
10026 ldbl_lpinfo * const lp,
10027 ldbl_price_info * const pinf,
10028 int const phase,
10029 int const pricetype),
10030 ldbl_ILLprice_delete_onempart_price (
10031
10032 ldbl_price_info * const pinf,
10033 int const indx,
10034 int const pricetype),
10035 ldbl_ILLprice_mpartial_group (
10036 ldbl_lpinfo * const lp,
10037 ldbl_mpart_info * const p,
10038 int const phase,
10039 int const g,
10040 int const pricetype),
10041 ldbl_ILLprice_column (
10042 ldbl_lpinfo * const lp,
10043 int const ix,
10044 int const phase,
10045 ldbl_price_res * const pr),
10046 ldbl_ILLprice_row (
10047 ldbl_lpinfo * const lp,
10048 int const ix,
10049 int const phase,
10050 ldbl_price_res * const pr),
10051 ldbl_ILLprice_update_psteep_norms (
10052 ldbl_lpinfo * lp,
10053 ldbl_p_steep_info * psinfo,
10054 ldbl_svector * wz,
10055 int eindex,
10056 long double yl),
10057 ldbl_ILLprice_update_dsteep_norms (
10058 ldbl_lpinfo * const lp,
10059 ldbl_d_steep_info * const dsinfo,
10060 ldbl_svector * const wz,
10061 int const lindex,
10062 long double yl),
10063 ldbl_ILLprice_compute_dual_inf (
10064 ldbl_lpinfo * const lp,
10065 ldbl_price_info * const p,
10066 int *const ix,
10067 int const icnt,
10068 int const phase),
10069 ldbl_ILLprice_primal (
10070 ldbl_lpinfo * const lp,
10071 ldbl_price_info * const pinf,
10072 ldbl_price_res * const pr,
10073 int const phase),
10074 ldbl_ILLprice_compute_primal_inf (
10075 ldbl_lpinfo * const lp,
10076 ldbl_price_info * const p,
10077 int *const ix,
10078 int const icnt,
10079 int const phase),
10080 ldbl_ILLprice_dual (
10081 ldbl_lpinfo * const lp,
10082 ldbl_price_info * const pinf,
10083 int const phase,
10084 ldbl_price_res * const pr);
10085
10086 void ldbl_test_dsteep_norms (
10087 ldbl_lpinfo * const lp,
10088 ldbl_price_info * const p);
10089
10090 #endif
10091 #endif
10092 #endif
10093 #ifdef HAVE_LONG_DOUBLE
10094 #if HAVE_LONG_DOUBLE
10095
10096
10097
10098
10099
10100
10101
10102
10103
10104
10105
10106
10107
10108
10109
10110
10111
10112
10113
10114
10115
10116
10117 #ifndef ldbl___PRIORITY_H__
10118 #define ldbl___PRIORITY_H__
10119
10120
10121
10122
10123
10124
10125 typedef struct ldbl_ILLpriority
10126 {
10127 ldbl_ILLdheap ldbl_heap;
10128 union ldbl_ILLpri_data
10129 {
10130 void *data;
10131 int next;
10132 }
10133 *pri_info;
10134 int space;
10135 int freelist;
10136 }
10137 ldbl_ILLpriority;
10138
10139 void ldbl_ILLutil_priority_free (
10140 ldbl_ILLpriority * pri),
10141 ldbl_ILLutil_priority_delete (
10142 ldbl_ILLpriority * pri,
10143 int handle),
10144 ldbl_ILLutil_priority_changekey (
10145 ldbl_ILLpriority * pri,
10146 int handle,
10147 long double * newkey),
10148 ldbl_ILLutil_priority_findmin (
10149 ldbl_ILLpriority * pri,
10150 long double * keyval,
10151 void **en),
10152 ldbl_ILLutil_priority_deletemin (
10153 ldbl_ILLpriority * pri,
10154 long double * keyval,
10155 void **en);
10156
10157 int ldbl_ILLutil_priority_init (
10158 ldbl_ILLpriority * pri,
10159 int k),
10160 ldbl_ILLutil_priority_insert (
10161 ldbl_ILLpriority * pri,
10162 void *data,
10163 long double * keyval,
10164 int *handle);
10165
10166
10167
10168 #endif
10169 #endif
10170 #endif
10171 #ifdef HAVE_LONG_DOUBLE
10172 #if HAVE_LONG_DOUBLE
10173
10174
10175
10176
10177
10178
10179
10180
10181
10182
10183
10184
10185
10186
10187
10188
10189
10190
10191
10192
10193
10194
10195
10196 #ifndef ldbl___RATIO_H
10197 #define ldbl___RATIO_H
10198 typedef struct ldbl_ratio_res
10199 {
10200 long double tz;
10201 int eindex;
10202 int lindex;
10203 int lvstat;
10204 int ratio_stat;
10205 int boundch;
10206 int coeffch;
10207 long double lbound;
10208 long double ecoeff;
10209 long double pivotval;
10210 }
10211 ldbl_ratio_res;
10212
10213 void ldbl_ILLratio_pI_test (
10214 ldbl_lpinfo * const lp,
10215 int const eindex,
10216 int const dir,
10217 ldbl_ratio_res * const rs),
10218 ldbl_ILLratio_pII_test (
10219 ldbl_lpinfo * const lp,
10220 int const eindex,
10221 int const dir,
10222 ldbl_ratio_res * const rs),
10223 ldbl_ILLratio_dI_test (
10224 ldbl_lpinfo * const lp,
10225 int const lindex,
10226 int const lvstat,
10227 ldbl_ratio_res * const rs),
10228 ldbl_ILLratio_dII_test (
10229 ldbl_lpinfo * const lp,
10230
10231 int const lvstat,
10232 ldbl_ratio_res * const rs),
10233 ldbl_ILLratio_longdII_test (
10234 ldbl_lpinfo * const lp,
10235 int const lindex,
10236 int const lvstat,
10237 ldbl_ratio_res * const rs),
10238 ldbl_ILLratio_pivotin_test (
10239 ldbl_lpinfo * const lp,
10240 int *const rlist,
10241 int const rcnt,
10242 ldbl_ratio_res * const rs);
10243
10244 #endif
10245 #endif
10246 #endif
10247 #ifdef HAVE_LONG_DOUBLE
10248 #if HAVE_LONG_DOUBLE
10249
10250
10251
10252
10253
10254
10255
10256
10257
10258
10259
10260
10261
10262
10263
10264
10265
10266
10267
10268
10269
10270
10271
10272 #ifndef ldbl_READ_LP_STATE_H
10273 #define ldbl_READ_LP_STATE_H
10274
10275
10276
10277
10278
10279
10280
10281
10282
10283
10284
10285
10286
10287
10288 typedef struct ldbl_ILLread_lp_state
10289 {
10290 ldbl_qsline_reader *file;
10291 const char *file_name;
10292 char *p;
10293 long double bound_val;
10294 int ldbl_interactive;
10295 int line_num;
10296 int column_index;
10297 char realline[ILL_namebufsize];
10298 char line[ILL_namebufsize];
10299 char field[ILL_namebufsize + 1];
10300 char fieldOnFirstCol;
10301 char eof;
10302 char sense_val;
10303 }
10304 ldbl_ILLread_lp_state;
10305
10306 extern int ldbl_ILLread_lp_state_init (
10307 ldbl_ILLread_lp_state * state,
10308 ldbl_qsline_reader * file,
10309 const char *ldbl_fname,
10310 int interactve);
10311 extern int ldbl_ILLread_lp_state_next_line (
10312 ldbl_ILLread_lp_state * state);
10313 extern int ldbl_ILLread_lp_state_next_var (
10314 ldbl_ILLread_lp_state * state);
10315 extern int ldbl_ILLread_lp_state_keyword (
10316 ldbl_ILLread_lp_state * state,
10317 const char **kwd);
10318 extern int ldbl_ILLread_lp_state_bad_keyword (
10319 ldbl_ILLread_lp_state * state);
10320 extern int ldbl_ILLtest_lp_state_keyword (
10321 ldbl_ILLread_lp_state * state,
10322 const char *kwd[]);
10323 extern int ldbl_ILLread_lp_state_next_field (
10324 ldbl_ILLread_lp_state * state);
10325 extern int ldbl_ILLread_lp_state_next_field_on_line (
10326 ldbl_ILLread_lp_state * state);
10327 extern void ldbl_ILLread_lp_state_prev_field (
10328 ldbl_ILLread_lp_state * state);
10329 extern int ldbl_ILLread_lp_state_sign (
10330 ldbl_ILLread_lp_state * state,
10331 long double * sign);
10332 extern int ldbl_ILLread_lp_state_possible_coef (
10333 ldbl_ILLread_lp_state * state,
10334 long double * coef,
10335 const long double defValue);
10336
10337
10338
10339 extern int ldbl_ILLread_lp_state_possible_bound_value (
10340 ldbl_ILLread_lp_state * state);
10341
10342
10343
10344 extern int ldbl_ILLread_lp_state_colon (
10345 ldbl_ILLread_lp_state * state);
10346 extern int ldbl_ILLread_lp_state_has_colon (
10347 ldbl_ILLread_lp_state * state);
10348 extern int ldbl_ILLread_lp_statxe_has_colon (
10349 ldbl_ILLread_lp_state * state);
10350 extern int ldbl_ILLread_lp_state_next_constraint (
10351 ldbl_ILLread_lp_state * state);
10352 extern int ldbl_ILLread_lp_state_sense (
10353 ldbl_ILLread_lp_state * state);
10354 extern int ldbl_ILLtest_lp_state_sense (
10355 ldbl_ILLread_lp_state * state,
10356 int all);
10357 extern void ldbl_ILLtest_lp_state_bound_sense (
10358 ldbl_ILLread_lp_state * state);
10359 extern int ldbl_ILLread_lp_state_value (
10360 ldbl_ILLread_lp_state * state,
10361 long double * d);
10362 extern int ldbl_ILLtest_lp_state_next_is (
10363 ldbl_ILLread_lp_state * state,
10364 const char *str);
10365 extern int ldbl_ILLread_lp_state_skip_blanks (
10366 ldbl_ILLread_lp_state * state,
10367 int wrapLines);
10368
10369 extern int ldbl_ILLcheck_subject_to (
10370 ldbl_ILLread_lp_state * state);
10371
10372
10373
10374
10375 extern int ldbl_ILLlp_error (
10376 ldbl_ILLread_lp_state * state,
10377 const char *format,
10378 ...);
10379 extern void ldbl_ILLlp_warn (
10380 ldbl_ILLread_lp_state * state,
10381 const char *format,
10382 ...);
10383
10384
10385
10386
10387 extern int ldbl_ILLget_value (
10388 char *line,
10389 long double * coef);
10390
10391 #endif
10392 #endif
10393 #endif
10394 #ifdef HAVE_LONG_DOUBLE
10395 #if HAVE_LONG_DOUBLE
10396
10397
10398
10399
10400
10401
10402
10403
10404
10405
10406
10407
10408
10409
10410
10411
10412
10413
10414
10415
10416
10417
10418
10419 #ifndef ldbl_READ_MPS_STATE_H
10420 #define ldbl_READ_MPS_STATE_H
10421
10422
10423
10424 typedef struct ldbl_ILLread_mps_state_struct
10425 {
10426 int section[ILL_MPS_N_SECTIONS];
10427 ILLmps_section active;
10428 const char *file_name;
10429 ldbl_qsline_reader *file;
10430 unsigned int line_num;
10431 unsigned int field_num;
10432 int intvar;
10433 int sosvar;
10434 char line[ILL_namebufsize];
10435 char key[ILL_namebufsize];
10436 char field[ILL_namebufsize];
10437 char *obj;
10438 char *p;
10439 }
10440 ldbl_ILLread_mps_state;
10441
10442 extern int ldbl_ILLmps_state_init (
10443 ldbl_ILLread_mps_state * state,
10444 ldbl_qsline_reader * file,
10445 const char *ldbl_fname);
10446 extern void ldbl_ILLmps_state_clear (
10447 ldbl_ILLread_mps_state * state);
10448 extern int ldbl_ILLmps_set_section (
10449 ldbl_ILLread_mps_state * state,
10450 const ILLmps_section sec);
10451
10452 extern int ldbl_ILLmps_next_line (
10453 ldbl_ILLread_mps_state * state);
10454 extern int ldbl_ILLmps_next_field (
10455 ldbl_ILLread_mps_state * state);
10456 extern int ldbl_ILLmps_next_coef (
10457 ldbl_ILLread_mps_state * state,
10458 long double * coef);
10459 extern int ldbl_ILLmps_next_bound (
10460 ldbl_ILLread_mps_state * state,
10461 long double * coef);
10462 extern void ldbl_ILLmps_check_end_of_line (
10463 ldbl_ILLread_mps_state * state);
10464 extern void ldbl_ILLmps_set_end_of_line (
10465 ldbl_ILLread_mps_state * state);
10466
10467 extern int ldbl_ILLmps_int_sos_mode (
10468 ldbl_ILLread_mps_state * state);
10469
10470 extern const char *ldbl_ILLmps_possibly_blank_name (
10471 const char *field,
10472 ldbl_ILLread_mps_state * state,
10473 ILLsymboltab * tab);
10474 extern int ldbl_ILLmps_empty_key (
10475 ldbl_ILLread_mps_state * state);
10476 extern int ldbl_ILLmps_empty_field (
10477 ldbl_ILLread_mps_state * state);
10478
10479 extern int ldbl_ILLmps_error (
10480 ldbl_ILLread_mps_state * state,
10481 const char *format,
10482 ...);
10483 extern void ldbl_ILLmps_warn (
10484 ldbl_ILLread_mps_state * state,
10485 const char *format,
10486 ...);
10487
10488 #endif
10489 #endif
10490 #endif
10491 #ifdef HAVE_LONG_DOUBLE
10492 #if HAVE_LONG_DOUBLE
10493
10494
10495
10496
10497
10498
10499
10500
10501
10502
10503
10504
10505
10506
10507
10508
10509
10510
10511
10512
10513
10514
10515
10516
10517 #ifndef ldbl___SIMPLEX_H
10518 #define ldbl___SIMPLEX_H
10519
10520 struct itcnt_t;
10521 typedef struct ldbl_param_info
10522 {
10523 int origalgo;
10524 int pphaseI;
10525 int pphaseII;
10526 int dphaseI;
10527 int dphaseII;
10528 int p_strategy;
10529 int d_strategy;
10530 }
10531 ldbl_param_info;
10532
10533 typedef struct ldbl_iter_info
10534 {
10535 int newphase;
10536 int nextphase;
10537 int nextstep;
10538 int sdisplay;
10539 int itercnt;
10540 int solstatus;
10541 int curtime;
10542 int rounds;
10543 int chkobj;
10544 int nosolve;
10545 int noprog;
10546 int inner;
10547 int algorithm;
10548 int resumeid;
10549 int pricetype;
10550 int n_restart;
10551 int n_pivot_fail;
10552 long double prevobj;
10553 long double objtol;
10554 ldbl_param_info oldinfo;
10555 }
10556 ldbl_iter_info;
10557
10558 void ldbl_ILLsimplex_init_lpinfo ( ldbl_lpinfo * lp),
10559 ldbl_ILLsimplex_free_lpinfo ( ldbl_lpinfo * lp),
10560 ldbl_ILLsimplex_load_lpinfo ( ldbl_ILLlpdata * qslp, ldbl_lpinfo * lp),
10561 ldbl_ILLsimplex_set_bound ( ldbl_lpinfo * lp, const long double * objbound, int sense);
10562 void ldbl_free_internal_lpinfo ( ldbl_lpinfo * lp);
10563 void ldbl_init_internal_lpinfo ( ldbl_lpinfo * lp);
10564 int ldbl_build_internal_lpinfo ( ldbl_lpinfo * lp);
10565 int ldbl_ILLsimplex_retest_psolution ( ldbl_lpinfo * lp, ldbl_price_info * p, int phase,
10566 ldbl_feas_info * fs),
10567 ldbl_ILLsimplex_retest_dsolution ( ldbl_lpinfo * lp, ldbl_price_info * p, int phase,
10568 ldbl_feas_info * fs),
10569 ldbl_ILLsimplex_solution ( ldbl_lpinfo * lp, long double * xz, long double * piz,
10570 long double * dz, long double * objval),
10571 ldbl_ILLsimplex_infcertificate ( ldbl_lpinfo * lp, long double * pi),
10572 ldbl_ILLsimplex ( ldbl_lpinfo * lp, int algorithm, ldbl_ILLlp_basis * B,
10573 ldbl_price_info * pinf, int *sol_status, int sdisplay, itcnt_t* itcnt),
10574 ldbl_ILLsimplex_pivotin ( ldbl_lpinfo * lp, ldbl_price_info * pinf, int rcnt,
10575 int *rlist, int pivot_opt, int *basis_mod);
10576
10577 #endif
10578 #endif
10579 #endif
10580 #ifdef HAVE_LONG_DOUBLE
10581 #if HAVE_LONG_DOUBLE
10582
10583
10584
10585
10586
10587
10588
10589
10590
10591
10592
10593
10594
10595
10596
10597
10598
10599
10600
10601
10602
10603
10604
10605 #ifndef ldbl_WRITE_LP_STATE_H
10606 #define ldbl_WRITE_LP_STATE_H
10607
10608
10609
10610
10611
10612
10613
10614
10615
10616
10617
10618
10619
10620 typedef struct ldbl_ILLwrite_lp_state
10621 {
10622 char buf[ILL_namebufsize];
10623 char *p;
10624 int startlen;
10625 int total;
10626 }
10627 ldbl_ILLwrite_lp_state;
10628
10629 extern void ldbl_ILLwrite_lp_state_init (
10630 ldbl_ILLwrite_lp_state * line,
10631 const char *str);
10632 extern void ldbl_ILLwrite_lp_state_append (
10633 ldbl_ILLwrite_lp_state * line,
10634 const char *str);
10635 extern void ldbl_ILLwrite_lp_state_append_coef (
10636 ldbl_ILLwrite_lp_state * line,
10637 long double v,
10638 int cnt);
10639
10640
10641
10642
10643 extern void ldbl_ILLwrite_lp_state_append_number (
10644 ldbl_ILLwrite_lp_state * line,
10645 long double v);
10646 extern void ldbl_ILLwrite_lp_state_save_start (
10647 ldbl_ILLwrite_lp_state * line);
10648 extern void ldbl_ILLwrite_lp_state_start (
10649 ldbl_ILLwrite_lp_state * line);
10650
10651 #endif
10652 #endif
10653 #endif
10654 #ifdef HAVE_LONG_DOUBLE
10655 #if HAVE_LONG_DOUBLE
10656
10657
10658
10659
10660
10661
10662
10663
10664
10665
10666
10667
10668
10669
10670
10671
10672
10673
10674
10675
10676
10677
10678
10679 #ifndef ldbl_ILL_LIB_H
10680 #define ldbl_ILL_LIB_H
10681
10682
10683
10684
10685
10686
10687
10688
10689
10690
10691
10692
10693
10694
10695 struct itcnt_t;
10696
10697 int ldbl_ILLlib_optimize ( ldbl_lpinfo * lp, ldbl_ILLlp_basis * B, ldbl_price_info * pinf, int algo,
10698 int *status, int simplex_display, struct itcnt_t*itcnt),
10699 ldbl_ILLlib_cache_solution ( ldbl_lpinfo * lp, ldbl_ILLlp_cache * C),
10700 ldbl_ILLlib_solution ( ldbl_lpinfo * lp, ldbl_ILLlp_cache * C, long double * val,
10701 long double * x, long double * pi, long double * slack, long double * rc),
10702 ldbl_ILLlib_get_x ( ldbl_lpinfo * lp, ldbl_ILLlp_cache * C, long double * x),
10703 ldbl_ILLlib_get_slack ( ldbl_lpinfo * lp, ldbl_ILLlp_cache * C, long double * slack),
10704 ldbl_ILLlib_objval ( ldbl_lpinfo * lp, ldbl_ILLlp_cache * C, long double * val),
10705 ldbl_ILLlib_tableau ( ldbl_lpinfo * lp, int row, long double * binv, long double * tabrow),
10706 ldbl_ILLlib_basis_order ( ldbl_lpinfo * lp, int *header),
10707 ldbl_ILLlib_newrow ( ldbl_lpinfo * lp, ldbl_ILLlp_basis * B,const long double rhs, int sense,
10708 const long double range, const char *name),
10709 ldbl_ILLlib_newrows ( ldbl_lpinfo * lp, ldbl_ILLlp_basis * B, int num,const long double * rhs,
10710 char *sense, const long double * range, const char **names),
10711 ldbl_ILLlib_addrow ( ldbl_lpinfo * lp, ldbl_ILLlp_basis * B, int cnt, int *ind,
10712 const long double * val, const long double rhs, int sense,const long double range,
10713 const char *rowname),
10714 ldbl_ILLlib_addrows ( ldbl_lpinfo * lp, ldbl_ILLlp_basis * B, int num, int *rmatcnt,
10715 int *rmatbeg, int *rmatind,const long double * rmatval,const long double * rhs,
10716 char *sense, const long double * range, const char **names, int *nofactor),
10717 ldbl_ILLlib_delrows ( ldbl_lpinfo * lp, ldbl_ILLlp_basis * B, ldbl_ILLlp_cache * C, int num,
10718 int *dellist, int *basis_ok, int *cache_ok),
10719 ldbl_ILLlib_newcol ( ldbl_lpinfo * lp, ldbl_ILLlp_basis * B,const long double obj,
10720 const long double lower,const long double upper, const char *name, int factorok),
10721 ldbl_ILLlib_newcols ( ldbl_lpinfo * lp, ldbl_ILLlp_basis * B, int num, long double * obj,
10722 long double * lower, long double * upper, const char **names, int factorok),
10723 ldbl_ILLlib_addcol ( ldbl_lpinfo * lp, ldbl_ILLlp_basis * B, int cnt, int *ind,
10724 long double * val,const long double obj,const long double lower,const long double upper,
10725 const char *name, int factorok),
10726 ldbl_ILLlib_addcols ( ldbl_lpinfo * lp, ldbl_ILLlp_basis * B, int num, int *cmatcnt,
10727 int *cmatbeg, int *cmatind, long double * cmatval, long double * obj,
10728 long double * lower, long double * upper, const char **names, int factorok),
10729 ldbl_ILLlib_delcols ( ldbl_lpinfo * lp, ldbl_ILLlp_basis * B, int num, int *dellist,
10730 int *basis_ok),
10731 ldbl_ILLlib_chgcoef ( ldbl_lpinfo * lp, int rowindex, int colindex, long double coef),
10732 ldbl_ILLlib_getcoef (ldbl_lpinfo *lp, int rowindex, int colindex, long double* coef),
10733 ldbl_ILLlib_chgrange (ldbl_lpinfo *lp, int indx, long double coef),
10734 ldbl_ILLlib_chgsense ( ldbl_lpinfo * lp, int num, int *rowlist, char *sense),
10735 ldbl_ILLlib_getsenses (ldbl_lpinfo *lp, char *senses),
10736 ldbl_ILLlib_getrows ( ldbl_lpinfo * lp, int num, int *rowlist, int **rowcnt,
10737 int **rowbeg, int **rowind, long double ** rowval, long double ** rhs,
10738 char **sense, long double ** range, char ***names),
10739 ldbl_ILLlib_getcols ( ldbl_lpinfo * lp, int num, int *collist, int **colcnt,
10740 int **colbeg, int **colind, long double ** colval, long double ** obj,
10741 long double ** lower, long double ** upper, char ***names),
10742 ldbl_ILLlib_getobj ( ldbl_lpinfo * lp, long double * obj),
10743 ldbl_ILLlib_getobj_list (ldbl_lpinfo *lp, int num, int* collist, long double* obj),
10744 ldbl_ILLlib_chgobj ( ldbl_lpinfo * lp, int indx, long double coef),
10745 ldbl_ILLlib_getrhs ( ldbl_lpinfo * lp, long double * rhs),
10746 ldbl_ILLlib_chgrhs ( ldbl_lpinfo * lp, int indx, long double coef),
10747 ldbl_ILLlib_getintflags ( ldbl_lpinfo * lp, int *intflags),
10748 ldbl_ILLlib_rownames ( ldbl_lpinfo * lp, char **rownames),
10749 ldbl_ILLlib_colnames ( ldbl_lpinfo * lp, char **colnames),
10750 ldbl_ILLlib_colindex ( ldbl_lpinfo * lp, const char *name, int *colindex),
10751 ldbl_ILLlib_rowindex ( ldbl_lpinfo * lp, const char *name, int *rowindex),
10752 ldbl_ILLlib_chgbnd ( ldbl_lpinfo * lp, int indx, int lu,const long double bnd),
10753 ldbl_ILLlib_chgbnds ( ldbl_lpinfo * lp, int cnt, int *indx, char *lu, const long double * bnd),
10754 ldbl_ILLlib_getbnd ( ldbl_lpinfo * lp, int indx, int lu, long double * bnd),
10755 ldbl_ILLlib_getbnds ( ldbl_lpinfo * lp, long double * lower, long double * upper),
10756 ldbl_ILLlib_getbnds_list ( ldbl_lpinfo *lp, int num, int*collist, long double *lower,
10757 long double *upper),
10758 ldbl_ILLlib_strongbranch ( ldbl_lpinfo * lp, ldbl_price_info * pinf, int *candidatelist,
10759 int ncand, long double * xlist, long double * downpen, long double * uppen,
10760 int iterations, long double objbound, struct itcnt_t*itcnt),
10761 ldbl_ILLlib_getbasis ( ldbl_lpinfo * lp, char *cstat, char *rstat),
10762 ldbl_ILLlib_loadbasis ( ldbl_ILLlp_basis * B, int nstruct, int nrows, char *cstat,
10763 char *rstat),
10764 ldbl_ILLlib_readbasis ( ldbl_lpinfo * lp, ldbl_ILLlp_basis * B, const char *ldbl_fname),
10765 ldbl_ILLlib_writebasis ( ldbl_lpinfo * lp, ldbl_ILLlp_basis * B, const char *ldbl_fname),
10766 ldbl_ILLlib_getrownorms ( ldbl_lpinfo * lp, ldbl_price_info * pinf, long double * rownorms),
10767 ldbl_ILLlib_loadrownorms ( ldbl_lpinfo * lp, ldbl_price_info * pinf, long double * rownorms),
10768 ldbl_ILLlib_recompute_rownorms ( ldbl_lpinfo * lp, ldbl_price_info * pinf),
10769 ldbl_ILLlib_iter ( ldbl_lpinfo * lp),
10770 ldbl_ILLlib_print_x ( EGioFile_t * fd, ldbl_lpinfo * lp, ldbl_ILLlp_cache * C, long double * x,
10771 int nonZerosOnly),
10772 ldbl_ILLwrite_lp_file ( ldbl_ILLlpdata * lp, EGioFile_t * eout, ldbl_qserror_collector * c);
10773
10774
10775 extern int ldbl_ILLlib_findName (
10776 ldbl_ILLlpdata * qslp,
10777 int forRow,
10778 const char *name,
10779 int id,
10780 char buf[ILL_namebufsize]);
10781
10782
10783
10784
10785
10786
10787
10788 int ldbl_ILLpresolve_add_logicals (
10789 ldbl_ILLlpdata * lp);
10790
10791
10792
10793
10794
10795
10796
10797
10798 int ldbl_ILLmip_binary_dfs (
10799 ldbl_lpinfo * lp);
10800
10801 #endif
10802 #endif
10803 #endif
10804 #ifdef HAVE_LIBGMP
10805 #if HAVE_LIBGMP
10806
10807
10808
10809
10810
10811
10812
10813
10814
10815
10816
10817
10818
10819
10820
10821
10822
10823
10824
10825
10826
10827
10828
10829 #ifndef mpq___QS_QSTRUCT_H
10830 #define mpq___QS_QSTRUCT_H
10831
10832 typedef struct mpq_qsdata
10833 {
10834 struct mpq_ILLlpdata *qslp;
10835 struct mpq_lpinfo *lp;
10836 struct mpq_price_info *pricing;
10837 struct mpq_ILLlp_basis *basis;
10838 struct mpq_ILLlp_cache *cache;
10839 char *name;
10840 int qstatus;
10841 int factorok;
10842 int simplex_display;
10843 int simplex_scaling;
10844 itcnt_t itcnt;
10845 mpq_t uobjlim;
10846 mpq_t lobjlim;
10847 }
10848 mpq_QSdata;
10849
10850 #endif
10851 #endif
10852 #endif
10853 #ifdef HAVE_LIBGMP
10854 #if HAVE_LIBGMP
10855
10856
10857
10858
10859
10860
10861
10862
10863
10864
10865
10866
10867
10868
10869
10870
10871
10872
10873
10874
10875
10876
10877
10878 #ifndef mpq_EDITOR_H
10879 #define mpq_EDITOR_H
10880
10881 extern void mpq_ILLeditor_init (
10882 void);
10883 extern void mpq_ILLeditor (
10884 mpq_QSdata * p);
10885 extern int mpq_ILLeditor_solve (
10886 mpq_QSdata * p,
10887 int salgo);
10888
10889 #endif
10890 #endif
10891 #endif
10892 #ifdef HAVE_LIBGMP
10893 #if HAVE_LIBGMP
10894
10895
10896
10897
10898
10899
10900
10901
10902
10903
10904
10905
10906
10907
10908
10909
10910
10911
10912
10913
10914
10915
10916
10917
10918
10919
10920
10921
10922
10923 #ifndef mpq___SVECTOR_H
10924 #define mpq___SVECTOR_H
10925
10926 typedef struct mpq_svector
10927 {
10928 int nzcnt;
10929 int *indx;
10930 int size;
10931 mpq_t *coef;
10932 }
10933 mpq_svector;
10934
10935 void mpq_ILLsvector_init (
10936 mpq_svector * s),
10937 mpq_ILLsvector_free (
10938 mpq_svector * s);
10939
10940 int mpq_ILLsvector_alloc (
10941 mpq_svector * s,
10942 int nzcnt),
10943 mpq_ILLsvector_copy (
10944 const mpq_svector * s_in,
10945 mpq_svector * s_out);
10946
10947 #endif
10948
10949
10950
10951
10952
10953
10954
10955 #ifndef mpq___HEAP_H
10956 #define mpq___HEAP_H
10957
10958 typedef struct
10959 {
10960 int *entry;
10961 int *loc;
10962 mpq_t *key;
10963 int hexist;
10964 int maxsize;
10965 int size;
10966 }
10967 mpq_heap;
10968
10969 void mpq_ILLheap_insert (
10970 mpq_heap * const h,
10971 int const ix),
10972 mpq_ILLheap_modify (
10973 mpq_heap * const h,
10974 int const ix),
10975 mpq_ILLheap_delete (
10976 mpq_heap * const h,
10977 int const ix),
10978 mpq_ILLheap_init (
10979 mpq_heap * const h),
10980 mpq_ILLheap_free (
10981 mpq_heap * const h);
10982
10983 int mpq_ILLheap_findmin (
10984 mpq_heap * const h),
10985 mpq_ILLheap_build (
10986 mpq_heap * const h,
10987 int const nelems,
10988 mpq_t * key);
10989
10990 #endif
10991
10992
10993
10994
10995
10996
10997
10998 #ifndef mpq___MATRIX_H
10999 #define mpq___MATRIX_H
11000
11001 typedef struct mpq_ILLmatrix
11002 {
11003 mpq_t *matval;
11004 int *matcnt;
11005 int *matind;
11006 int *matbeg;
11007 int matcols;
11008 int matrows;
11009 int matcolsize;
11010 int matsize;
11011 int matfree;
11012
11013
11014 }
11015 mpq_ILLmatrix;
11016
11017 void mpq_ILLmatrix_init (
11018 mpq_ILLmatrix * A);
11019 void mpq_ILLmatrix_free (
11020 mpq_ILLmatrix * A);
11021 void mpq_ILLmatrix_prt (
11022 EGioFile_t * fd,
11023 mpq_ILLmatrix * A);
11024
11025 #endif
11026 #endif
11027 #endif
11028 #ifdef HAVE_LIBGMP
11029 #if HAVE_LIBGMP
11030
11031
11032
11033
11034
11035
11036
11037
11038
11039
11040
11041
11042
11043
11044
11045
11046
11047
11048
11049
11050
11051
11052
11053 #ifndef mpq___QS_FACTOR_H_
11054 #define mpq___QS_FACTOR_H_
11055
11056 typedef char mpq_QSbool;
11057
11058 typedef struct mpq_uc_info
11059 {
11060 int cbeg;
11061 int nzcnt;
11062 int next;
11063 int prev;
11064 int delay;
11065 }
11066 mpq_uc_info;
11067
11068 typedef struct mpq_ur_info
11069 {
11070 mpq_t max;
11071 int rbeg;
11072 int nzcnt;
11073 int pivcnt;
11074 int next;
11075 int prev;
11076 int delay;
11077 }
11078 mpq_ur_info;
11079
11080 typedef struct mpq_lc_info
11081 {
11082 int cbeg;
11083 int nzcnt;
11084 int c;
11085 int crank;
11086 int delay;
11087 }
11088 mpq_lc_info;
11089
11090 typedef struct mpq_lr_info
11091 {
11092 int rbeg;
11093 int nzcnt;
11094 int r;
11095 int rrank;
11096 int delay;
11097 }
11098 mpq_lr_info;
11099
11100 typedef struct mpq_er_info
11101 {
11102 int rbeg;
11103 int nzcnt;
11104 int r;
11105 }
11106 mpq_er_info;
11107
11108 typedef struct mpq_factor_work
11109 {
11110 int max_k;
11111 mpq_t fzero_tol;
11112 mpq_t szero_tol;
11113 mpq_t partial_tol;
11114 double ur_space_mul;
11115 double uc_space_mul;
11116 double lc_space_mul;
11117 double lr_space_mul;
11118 double er_space_mul;
11119 double grow_mul;
11120 int p;
11121 int etamax;
11122 double minmult;
11123 double maxmult;
11124 double updmaxmult;
11125 double dense_fract;
11126 int dense_min;
11127
11128 mpq_t maxelem_orig;
11129 int nzcnt_orig;
11130 mpq_t maxelem_factor;
11131 int nzcnt_factor;
11132 mpq_t maxelem_cur;
11133 int nzcnt_cur;
11134
11135 mpq_t partial_cur;
11136
11137 int dim;
11138 int stage;
11139 int nstages;
11140 int etacnt;
11141 mpq_t *work_coef;
11142 int *work_indx;
11143 mpq_uc_info *uc_inf;
11144 mpq_ur_info *ur_inf;
11145 mpq_lc_info *lc_inf;
11146 mpq_lr_info *lr_inf;
11147 mpq_er_info *er_inf;
11148 int *ucindx;
11149 int *ucrind;
11150 mpq_t *uccoef;
11151 int *urindx;
11152 int *urcind;
11153 mpq_t *urcoef;
11154 int *lcindx;
11155 mpq_t *lccoef;
11156 int *lrindx;
11157 mpq_t *lrcoef;
11158 int *erindx;
11159 mpq_t *ercoef;
11160 int *rperm;
11161 int *rrank;
11162 int *cperm;
11163 int *crank;
11164 mpq_svector xtmp;
11165 int ur_freebeg;
11166 int ur_space;
11167 int uc_freebeg;
11168 int uc_space;
11169 int lc_freebeg;
11170 int lc_space;
11171 int lr_freebeg;
11172 int lr_space;
11173 int er_freebeg;
11174 int er_space;
11175
11176 int *p_nsing;
11177 int **p_singr;
11178 int **p_singc;
11179
11180 mpq_t *dmat;
11181 int drows;
11182 int dcols;
11183 int dense_base;
11184 }
11185 mpq_factor_work;
11186
11187 void mpq_ILLfactor_init_factor_work (
11188 mpq_factor_work * f),
11189 mpq_ILLfactor_free_factor_work (
11190 mpq_factor_work * f),
11191 mpq_ILLfactor_ftran (
11192 mpq_factor_work * f,
11193 mpq_svector * a,
11194 mpq_svector * x),
11195 mpq_ILLfactor_ftran_update (
11196 mpq_factor_work * f,
11197 mpq_svector * a,
11198 mpq_svector * upd,
11199 mpq_svector * x),
11200 mpq_ILLfactor_btran (
11201 mpq_factor_work * f,
11202 mpq_svector * a,
11203 mpq_svector * x);
11204
11205 int mpq_ILLfactor_create_factor_work (
11206 mpq_factor_work * f,
11207 int dim),
11208 mpq_ILLfactor_set_factor_iparam (
11209 mpq_factor_work * f,
11210 int param,
11211 int val),
11212 mpq_ILLfactor_set_factor_dparam (
11213 mpq_factor_work * f,
11214 int param,
11215 mpq_t val),
11216 mpq_ILLfactor (
11217 mpq_factor_work * f,
11218 int *basis,
11219 int *cbeg,
11220 int *clen,
11221 int *cindx,
11222 mpq_t * ccoef,
11223 int *p_nsing,
11224 int **p_singr,
11225 int **p_singc),
11226 mpq_ILLfactor_update (
11227 mpq_factor_work * f,
11228 mpq_svector * a,
11229 int col,
11230 int *p_refact);
11231
11232 #endif
11233 #endif
11234 #endif
11235 #ifdef HAVE_LIBGMP
11236 #if HAVE_LIBGMP
11237
11238
11239
11240
11241
11242
11243
11244
11245
11246
11247
11248
11249
11250
11251
11252
11253
11254
11255
11256
11257
11258
11259
11260 #ifndef mpq___QS_LPDEFS_H
11261 #define mpq___QS_LPDEFS_H
11262
11263
11264
11265 #define mpq_INFTY mpq_ILL_MAXDOUBLE
11266 #define mpq_NINFTY mpq_ILL_MINDOUBLE
11267
11268
11269
11270
11271 extern mpq_t mpq_PARAM_IBASIS_RPIVOT;
11272 extern mpq_t mpq_PARAM_IBASIS_RTRIANG;
11273 extern mpq_t mpq_PARAM_MIN_DNORM;
11274 extern mpq_t mpq_PFEAS_TOLER;
11275 extern mpq_t mpq_BD_TOLER;
11276 extern mpq_t mpq_DFEAS_TOLER;
11277 extern mpq_t mpq_PIVOT_TOLER;
11278 extern mpq_t mpq_SZERO_TOLER;
11279 extern mpq_t mpq_PIVZ_TOLER;
11280 extern mpq_t mpq_OBJBND_TOLER;
11281 extern mpq_t mpq_DBNDPIV_TOLER;
11282 extern mpq_t mpq_DBNDPIV_RATIO;
11283 extern mpq_t mpq_ALTPIV_TOLER;
11284
11285 extern mpq_t mpq_PROGRESS_ZERO;
11286 extern mpq_t mpq_PROGRESS_THRESH;
11287 extern mpq_t mpq_CB_EPS;
11288 extern mpq_t mpq_CB_INF_RATIO;
11289 extern mpq_t mpq_CB_PRI_RLIMIT;
11290
11291
11292 typedef struct
11293 {
11294 int ynz_cnt;
11295 int num_y;
11296 mpq_t y_ravg;
11297 int znz_cnt;
11298 int num_z;
11299 mpq_t z_ravg;
11300 int zanz_cnt;
11301 int num_za;
11302 mpq_t za_ravg;
11303 int pnorm_cnt;
11304 int dnorm_cnt;
11305 int pinz_cnt;
11306 int num_pi;
11307 int pi1nz_cnt;
11308 int num_pi1;
11309 int upnz_cnt;
11310 int num_up;
11311 int pupv_cnt;
11312 int dupv_cnt;
11313
11314 int start_slacks;
11315 int final_slacks;
11316 int start_art;
11317 int final_art;
11318
11319 int pI_iter;
11320 int pII_iter;
11321 int dI_iter;
11322 int dII_iter;
11323 int tot_iter;
11324
11325 int pivpI[10];
11326 int pivpII[10];
11327 int pivdI[10];
11328 int pivdII[10];
11329 }
11330 mpq_count_struct;
11331
11332
11333 typedef struct
11334 {
11335 mpq_t pfeas_tol;
11336 mpq_t dfeas_tol;
11337 mpq_t pivot_tol;
11338 mpq_t szero_tol;
11339 mpq_t ip_tol;
11340 mpq_t id_tol;
11341 }
11342 mpq_tol_struct;
11343
11344
11345 typedef struct mpq_bndinfo
11346 {
11347 mpq_t pbound;
11348 mpq_t cbound;
11349 int btype;
11350 int varnum;
11351 struct mpq_bndinfo *next;
11352 }
11353 mpq_bndinfo;
11354
11355
11356 typedef struct mpq_coefinfo
11357 {
11358 mpq_t pcoef;
11359 mpq_t ccoef;
11360 int varnum;
11361 struct mpq_coefinfo *next;
11362 }
11363 mpq_coefinfo;
11364
11365
11366 typedef struct mpq_feas_info
11367 {
11368 int pstatus;
11369 int dstatus;
11370 mpq_t totinfeas;
11371 }
11372 mpq_feas_info;
11373
11374 typedef struct mpq_lp_status_info
11375 {
11376 char optimal;
11377 char primal_feasible;
11378 char primal_infeasible;
11379 char primal_unbounded;
11380 char dual_feasible;
11381 char dual_infeasible;
11382 char dual_unbounded;
11383 char padd;
11384 }
11385 mpq_lp_status_info;
11386
11387 typedef struct mpq_pI_uinfo
11388 {
11389 int tctr;
11390 int i;
11391 int *perm;
11392 int *ix;
11393 int fs;
11394 mpq_t piv;
11395 mpq_t *t;
11396 mpq_t dty;
11397 mpq_t c_obj;
11398 mpq_t tz;
11399 }
11400 mpq_pI_uinfo;
11401
11402 extern void mpq_ILLlp_status_info_init (
11403 mpq_lp_status_info * ls);
11404
11405
11406
11407
11408
11409
11410 typedef struct mpq_lpinfo
11411 {
11412
11413 mpq_t objval;
11414 mpq_t pobjval;
11415 mpq_t dobjval;
11416 mpq_t pinfeas;
11417 mpq_t dinfeas;
11418 mpq_t objbound;
11419 mpq_lp_status_info probstat;
11420 mpq_lp_status_info basisstat;
11421 int nrows;
11422 int ncols;
11423 int *matcnt;
11424 int *matbeg;
11425 int *matind;
11426 mpq_t *matval;
11427 int matfree;
11428 int matsize;
11429 mpq_t *bz;
11430 mpq_t *lz;
11431 mpq_t *uz;
11432 mpq_t *cz;
11433 int localrows;
11434 int *rowcnt;
11435 int *rowbeg;
11436 int *rowind;
11437 mpq_t *rowval;
11438
11439 mpq_t *xbz;
11440 mpq_t *piz;
11441 mpq_t *dz;
11442 mpq_t *pIxbz;
11443 mpq_t *pIpiz;
11444 mpq_t *pIdz;
11445
11446 int final_phase;
11447 int infub_ix;
11448
11449 int basisid;
11450 int nnbasic;
11451 int *baz;
11452 int *nbaz;
11453 int *vstat;
11454 int *vindex;
11455 int fbasisid;
11456 mpq_factor_work *f;
11457 int *vtype;
11458 char *vclass;
11459
11460 mpq_svector zz;
11461 mpq_svector yjz;
11462 mpq_svector zA;
11463 mpq_svector work;
11464 mpq_svector srhs;
11465 mpq_svector ssoln;
11466 int *iwork;
11467 mpq_pI_uinfo upd;
11468 int *bfeas;
11469 int *dfeas;
11470
11471 mpq_tol_struct *tol;
11472 mpq_count_struct *cnts;
11473 int nbchange;
11474 int ncchange;
11475 mpq_bndinfo *bchanges;
11476 mpq_coefinfo *cchanges;
11477 int pIratio;
11478 int pIIratio;
11479 int dIratio;
11480 int dIIratio;
11481
11482 int maxiter;
11483 int iterskip;
11484 double maxtime;
11485 double starttime;
11486 struct mpq_ILLlpdata *O;
11487 ILLrandstate rstate;
11488
11489 }
11490 mpq_lpinfo;
11491
11492
11493 typedef struct
11494 {
11495 int ninit;
11496 mpq_t *norms;
11497 int *refframe;
11498 }
11499 mpq_p_devex_info;
11500
11501 typedef struct
11502 {
11503 mpq_t *norms;
11504 }
11505 mpq_p_steep_info;
11506
11507 typedef struct
11508 {
11509 int k;
11510 int cgroup;
11511 int ngroups;
11512 int *gstart;
11513 int *gshift;
11514 int *gsize;
11515 int bsize;
11516 int *bucket;
11517 int *perm;
11518 mpq_t *infeas;
11519 }
11520 mpq_mpart_info;
11521
11522 typedef struct
11523 {
11524 int ninit;
11525 mpq_t *norms;
11526 int *refframe;
11527 }
11528 mpq_d_devex_info;
11529
11530 typedef struct
11531 {
11532 mpq_t *norms;
11533 }
11534 mpq_d_steep_info;
11535
11536
11537 typedef struct mpq_price_info
11538 {
11539 int p_strategy;
11540 int d_strategy;
11541 int pI_price;
11542 int pII_price;
11543 int dI_price;
11544 int dII_price;
11545 int cur_price;
11546 mpq_t *p_scaleinf;
11547 mpq_t *d_scaleinf;
11548 mpq_p_devex_info pdinfo;
11549 mpq_p_steep_info psinfo;
11550 mpq_mpart_info pmpinfo;
11551 mpq_d_devex_info ddinfo;
11552 mpq_d_steep_info dsinfo;
11553 mpq_mpart_info dmpinfo;
11554 mpq_heap h;
11555 mpq_t htrigger;
11556 int hineff;
11557 char init;
11558 }
11559 mpq_price_info;
11560
11561 #endif
11562 #endif
11563 #endif
11564 #ifdef HAVE_LIBGMP
11565 #if HAVE_LIBGMP
11566
11567
11568
11569
11570
11571
11572
11573
11574
11575
11576
11577
11578
11579
11580
11581
11582
11583
11584
11585
11586
11587
11588
11589 #ifndef mpq_LINE_READER_FILE_H
11590 #define mpq_LINE_READER_FILE_H
11591
11592
11593
11594 typedef char *(
11595 *mpq_qsread_line_fct) (
11596 char *s,
11597 int size,
11598 void *src);
11599
11600 typedef struct mpq_qsline_reader
11601 {
11602 mpq_qsread_line_fct read_line_fct;
11603 void *data_src;
11604 struct mpq_qserror_collector *error_collector;
11605 }
11606 mpq_qsline_reader;
11607
11608 mpq_qsline_reader *mpq_ILLline_reader_new (
11609 mpq_qsread_line_fct fct,
11610 void *data_src);
11611 void mpq_ILLline_reader_free (
11612 mpq_qsline_reader * reader);
11613
11614 #define mpq_ILLline_reader_get(s, size, reader) \
11615 (reader)->read_line_fct(s, size, (reader)->data_src)
11616
11617
11618
11619
11620
11621
11622
11623
11624
11625
11626
11627 #endif
11628 #endif
11629 #endif
11630 #ifdef HAVE_LIBGMP
11631 #if HAVE_LIBGMP
11632
11633
11634
11635
11636
11637
11638
11639
11640
11641
11642
11643
11644
11645
11646
11647
11648
11649
11650
11651
11652
11653
11654
11655 #ifndef mpq_ILL_LPDATA_H
11656 #define mpq_ILL_LPDATA_H
11657
11658
11659 extern mpq_t mpq_ILL_MAXDOUBLE;
11660 extern mpq_t mpq_ILL_MINDOUBLE;
11661
11662 #define mpq_ILL_MAXINT (2147483647)
11663 #define mpq_ILL_MIN (1)
11664 #define mpq_ILL_MAX (-1)
11665
11666
11667
11668 #define mpq_ILL_PRE_SCALE 1
11669 #define mpq_ILL_PRE_FIXED 2
11670 #define mpq_ILL_PRE_SINGLE_ROW 4
11671 #define mpq_ILL_PRE_FORCING 8
11672 #define mpq_ILL_PRE_SINGLE_COL 16
11673 #define mpq_ILL_PRE_DUPLICATE_ROW 32
11674 #define mpq_ILL_PRE_DUPLICATE_COL 64
11675 #define mpq_ILL_PRE_EMPTY_COL 128
11676 #define mpq_ILL_PRE_ALL (mpq_ILL_PRE_SCALE | mpq_ILL_PRE_FIXED | mpq_ILL_PRE_SINGLE_ROW \
11677 mpq_ILL_PRE_FORCING | mpq_ILL_PRE_SINGLE_COL | mpq_ILL_PRE_DUPLICATE_ROW \
11678 mpq_ILL_PRE_DUPLICATE_COL | mpq_ILL_PRE_EMPTY_COL)
11679 #define mpq_ILL_PRE_SIMPLE (mpq_ILL_PRE_FIXED | mpq_ILL_PRE_EMPTY_COL)
11680
11681 typedef struct mpq_ILLlpdata
11682 {
11683 int nrows;
11684 int ncols;
11685 int nstruct;
11686 int nzcount;
11687 int rowsize;
11688 int colsize;
11689 int structsize;
11690
11691 int objsense;
11692 char *sense;
11693 mpq_t *obj;
11694 mpq_t *rhs;
11695 mpq_t *rangeval;
11696 mpq_t *lower;
11697 mpq_t *upper;
11698 mpq_ILLmatrix A;
11699 struct mpq_ILLlp_rows *rA;
11700
11701 char **rownames;
11702 ILLsymboltab rowtab;
11703 char *objname;
11704
11705
11706 char **colnames;
11707 ILLsymboltab coltab;
11708
11709 char *probname;
11710 char *intmarker;
11711 int *structmap;
11712 int *rowmap;
11713 struct mpq_ILLlp_basis *basis;
11714 struct mpq_ILLlp_predata *presolve;
11715 struct mpq_ILLlp_sinfo *sinfo;
11716
11717
11718
11719
11720 mpq_ILLmatrix sos;
11721
11722
11723
11724 char *sos_type;
11725 int *is_sos_mem;
11726
11727
11728
11729 char *refrowname;
11730 int refind;
11731
11732
11733
11734
11735
11736
11737
11738
11739 qsstring_reporter reporter;
11740
11741 }
11742 mpq_ILLlpdata;
11743
11744 typedef struct mpq_ILLlp_basis
11745 {
11746 int nstruct;
11747 int nrows;
11748 int rownorms_size;
11749 int colnorms_size;
11750 char *cstat;
11751 char *rstat;
11752 mpq_t *rownorms;
11753 mpq_t *colnorms;
11754 }
11755 mpq_ILLlp_basis;
11756
11757 typedef struct mpq_ILLlp_cache
11758 {
11759 int nstruct;
11760 int nrows;
11761 int status;
11762 mpq_t val;
11763 mpq_t *x;
11764 mpq_t *pi;
11765 mpq_t *rc;
11766 mpq_t *slack;
11767 }
11768 mpq_ILLlp_cache;
11769
11770 typedef struct mpq_ILLlp_sinfo
11771 {
11772 int ncols;
11773 int nrows;
11774 int nzcount;
11775 int rowsize;
11776 int colsize;
11777 int objsense;
11778
11779 mpq_t *obj;
11780 mpq_t *rhs;
11781 mpq_t *lower;
11782 mpq_t *upper;
11783
11784 mpq_ILLmatrix A;
11785
11786 char **colnames;
11787 }
11788 mpq_ILLlp_sinfo;
11789
11790 typedef struct mpq_ILLlp_preline
11791 {
11792 mpq_t rhs;
11793 mpq_t obj;
11794 mpq_t lower;
11795 mpq_t upper;
11796 int count;
11797 int *ind;
11798 int row_or_col;
11799 mpq_t *val;
11800 }
11801 mpq_ILLlp_preline;
11802
11803 typedef struct mpq_ILLlp_preop
11804 {
11805 int ptype;
11806 int rowindex;
11807 int colindex;
11808 mpq_ILLlp_preline line;
11809 }
11810 mpq_ILLlp_preop;
11811
11812 typedef struct mpq_ILLlp_predata
11813 {
11814 int opcount;
11815 int opsize;
11816 mpq_ILLlp_preop *oplist;
11817 int r_nrows;
11818 int r_ncols;
11819 int *colmap;
11820 int *rowmap;
11821 mpq_t *rowscale;
11822 mpq_t *colscale;
11823 mpq_t *colfixval;
11824 mpq_t *rowfixval;
11825 }
11826 mpq_ILLlp_predata;
11827
11828 typedef struct mpq_ILLlp_rows
11829 {
11830 int *rowbeg;
11831 int *rowcnt;
11832 int *rowind;
11833 mpq_t *rowval;
11834 }
11835 mpq_ILLlp_rows;
11836
11837
11838
11839
11840
11841
11842
11843
11844 struct mpq_qsdata *mpq_ILLread (
11845 mpq_qsline_reader * file,
11846 const char *mpq_fname,
11847 int isMps);
11848 void mpq_ILLstart (
11849 void);
11850
11851
11852
11853 void mpq_ILLend (
11854 void);
11855
11856
11857 void mpq_ILLchange_precision (
11858 void);
11859
11860
11861
11862
11863 void mpq_ILLlpdata_init (
11864 mpq_ILLlpdata * lp);
11865 void mpq_ILLlpdata_free (
11866 mpq_ILLlpdata * lp);
11867 void mpq_ILLlp_basis_init (
11868 mpq_ILLlp_basis * B);
11869 void mpq_ILLlp_basis_free (
11870 mpq_ILLlp_basis * B);
11871 void mpq_ILLlp_cache_init (
11872 mpq_ILLlp_cache * C);
11873 void mpq_ILLlp_cache_free (
11874 mpq_ILLlp_cache * C);
11875 int mpq_ILLlp_basis_alloc (
11876 mpq_ILLlp_basis * B,
11877 int ncols,
11878 int nrows);
11879 int mpq_ILLlp_cache_alloc (
11880 mpq_ILLlp_cache * C,
11881 int ncols,
11882 int nrows);
11883
11884 int mpq_ILLlp_rows_init (
11885 mpq_ILLlp_rows * lp_rows,
11886 mpq_ILLlpdata * lp,
11887 int include_logicals);
11888 void mpq_ILLlp_rows_clear (
11889 mpq_ILLlp_rows * lp_rows);
11890 int mpq_ILLprint_report (
11891 mpq_ILLlpdata * lp,
11892 const char *format,
11893 ...);
11894
11895
11896
11897
11898
11899
11900
11901
11902
11903 void mpq_ILLlp_sinfo_init (
11904 mpq_ILLlp_sinfo * sinfo),
11905 mpq_ILLlp_sinfo_free (
11906 mpq_ILLlp_sinfo * sinfo),
11907 mpq_ILLlp_predata_init (
11908 mpq_ILLlp_predata * pre),
11909 mpq_ILLlp_predata_free (
11910 mpq_ILLlp_predata * pre);
11911
11912 int mpq_ILLlp_add_logicals (
11913 mpq_ILLlpdata * lp),
11914 mpq_ILLlp_scale (
11915 mpq_ILLlpdata * lp),
11916 mpq_ILLlp_presolve (
11917 mpq_ILLlpdata * lp,
11918 int pre_types);
11919
11920
11921
11922
11923
11924 extern int mpq___QSEX_SETUP;
11925
11926 #endif
11927 #endif
11928 #endif
11929 #ifdef HAVE_LIBGMP
11930 #if HAVE_LIBGMP
11931
11932
11933
11934
11935
11936
11937
11938
11939
11940
11941
11942
11943
11944
11945
11946
11947
11948
11949
11950
11951
11952
11953
11954 #ifndef mpq___BASIS_H
11955 #define mpq___BASIS_H
11956
11957
11958 #if 0
11959 #if EGLPNUM_TYPE != DBL_TYPE && EGLPNUM_TYPE != LDBL_TYPE
11960 extern mpq_t mpq_CB_PRI_RLIMIT;
11961 extern mpq_t mpq_CB_INF_RATIO;
11962 extern mpq_t mpq_CB_EPS;
11963 #endif
11964 #endif
11965
11966 typedef struct mpq_var_data
11967 {
11968 int nartif;
11969 int nslacks;
11970 int nfree;
11971 int nbndone;
11972 int nbounded;
11973 int nfixed;
11974 mpq_t cmax;
11975 }
11976 mpq_var_data;
11977
11978 void mpq_ILLbasis_init_vardata (
11979 mpq_var_data * vd);
11980 void mpq_ILLbasis_clear_vardata (
11981 mpq_var_data * vd);
11982
11983 int mpq_ILLbasis_build_basisinfo (
11984 mpq_lpinfo * lp),
11985 mpq_ILLbasis_get_initial (
11986 mpq_lpinfo * lp,
11987 int algorithm),
11988 mpq_ILLbasis_get_cinitial (
11989 mpq_lpinfo * lp,
11990 int algorithm),
11991 mpq_ILLbasis_load (
11992 mpq_lpinfo * lp,
11993 mpq_ILLlp_basis * B),
11994 mpq_ILLbasis_tableau_row (
11995 mpq_lpinfo * lp,
11996 int row,
11997 mpq_t * brow,
11998 mpq_t * trow,
11999 mpq_t * rhs,
12000 int strict),
12001 mpq_ILLbasis_factor (
12002 mpq_lpinfo * lp,
12003 int *singular),
12004 mpq_ILLbasis_refactor (
12005 mpq_lpinfo * lp),
12006 mpq_ILLbasis_update (
12007 mpq_lpinfo * lp,
12008 mpq_svector * y,
12009 int lindex,
12010 int *refactor,
12011 int *singular);
12012
12013 void mpq_ILLbasis_column_solve (
12014 mpq_lpinfo * lp,
12015 mpq_svector * rhs,
12016 mpq_svector * soln),
12017 mpq_ILLbasis_column_solve_update (
12018 mpq_lpinfo * lp,
12019 mpq_svector * rhs,
12020 mpq_svector * upd,
12021 mpq_svector * soln),
12022 mpq_ILLbasis_row_solve (
12023 mpq_lpinfo * lp,
12024 mpq_svector * rhs,
12025 mpq_svector * soln),
12026 mpq_ILLbasis_free_basisinfo (
12027 mpq_lpinfo * lp),
12028 mpq_ILLbasis_free_fbasisinfo (
12029 mpq_lpinfo * lp),
12030 mpq_ILLbasis_init_basisinfo (
12031 mpq_lpinfo * lp);
12032
12033 #endif
12034 #endif
12035 #endif
12036 #ifdef HAVE_LIBGMP
12037 #if HAVE_LIBGMP
12038
12039
12040
12041
12042
12043
12044
12045
12046
12047
12048
12049
12050
12051
12052
12053
12054
12055
12056
12057
12058
12059
12060 #ifndef mpq___DHEAPS_I_H__
12061 #define mpq___DHEAPS_I_H__
12062
12063
12064
12065
12066
12067
12068 typedef struct mpq_ILLdheap
12069 {
12070 mpq_t *key;
12071 int *entry;
12072 int *loc;
12073 int total_space;
12074 int size;
12075 }
12076 mpq_ILLdheap;
12077
12078 void mpq_ILLutil_dheap_free (
12079 mpq_ILLdheap * h),
12080 mpq_ILLutil_dheap_delete (
12081 mpq_ILLdheap * h,
12082 int i),
12083 mpq_ILLutil_dheap_changekey (
12084 mpq_ILLdheap * h,
12085 int i,
12086 mpq_t * newkey),
12087 mpq_ILLutil_dheap_findmin (
12088 mpq_ILLdheap * h,
12089 int *i),
12090 mpq_ILLutil_dheap_deletemin (
12091 mpq_ILLdheap * h,
12092 int *i);
12093
12094 int mpq_ILLutil_dheap_init (
12095 mpq_ILLdheap * h,
12096 int k),
12097 mpq_ILLutil_dheap_resize (
12098 mpq_ILLdheap * h,
12099 int newsize),
12100 mpq_ILLutil_dheap_insert (
12101 mpq_ILLdheap * h,
12102 int i);
12103
12104
12105
12106 #endif
12107 #endif
12108 #endif
12109 #ifdef HAVE_LIBGMP
12110 #if HAVE_LIBGMP
12111
12112
12113
12114
12115
12116
12117
12118
12119
12120
12121
12122
12123
12124
12125
12126
12127
12128
12129
12130
12131
12132
12133
12134 #ifndef mpq___QS_QSOPT_H
12135 #define mpq___QS_QSOPT_H
12136
12137
12138 #ifdef WIN32
12139
12140 #ifdef QSLIB_EXPORTS
12141 #define mpq_QSLIB_INTERFACE __declspec(dllexport)
12142 #else
12143 #define mpq_QSLIB_INTERFACE __declspec(dllimport)
12144 #endif
12145
12146 #else
12147 #define mpq_QSLIB_INTERFACE extern
12148 #endif
12149
12150 #ifdef WIN32
12151 typedef struct mpq_QSLIB_INTERFACE mpq_qsdata *mpq_QSprob;
12152 typedef struct mpq_QSLIB_INTERFACE qsbasis *mpq_QSbas;
12153 #else
12154 typedef struct mpq_qsdata *mpq_QSprob;
12155 typedef struct qsbasis *mpq_QSbas;
12156 #endif
12157
12158
12159
12160
12161
12162
12163
12164
12165
12166
12167
12168
12169
12170
12171
12172
12173
12174
12175
12176
12177 #ifdef __cplusplus
12178 extern "C"
12179 {
12180 #endif
12181
12182 #ifdef WIN32
12183
12184
12185
12186
12187 mpq_QSLIB_INTERFACE int mpq_solver_main ( int argc, char **argv);
12188 mpq_QSLIB_INTERFACE int mpq_reader_main ( int argc, char **argv);
12189 #endif
12190
12191 mpq_QSLIB_INTERFACE void mpq_QSfree ( void *ptr),
12192 mpq_QSfree_prob ( mpq_QSprob p),
12193 mpq_QSfree_basis ( mpq_QSbas B),
12194 mpq_QSset_precision ( const unsigned prec),
12195
12196
12197 mpq_QSstart ( void),
12198
12199
12200 mpq_QSend ( void);
12201
12202
12203 mpq_QSLIB_INTERFACE int mpq_QSopt_primal ( mpq_QSprob p, int *status),
12204 mpq_QSopt_dual ( mpq_QSprob p, int *status),
12205 mpq_QSopt_pivotin_col ( mpq_QSprob p, int ccnt, int *clist),
12206 mpq_QSopt_pivotin_row ( mpq_QSprob p, int rcnt, int *rlist),
12207 mpq_QSopt_strongbranch ( mpq_QSprob p, int ncand, int *candidatelist,
12208 mpq_t * xlist, mpq_t * down_vals, mpq_t * up_vals,
12209 int iterations, mpq_t objbound),
12210 mpq_QSchange_objsense ( mpq_QSprob p, int newsense),
12211 mpq_QSget_objsense ( mpq_QSprob p, int *newsense),
12212 mpq_QSnew_col ( mpq_QSprob p,const mpq_t obj,const mpq_t lower,const mpq_t upper,
12213 const char *name),
12214 mpq_QSadd_cols ( mpq_QSprob p, int num, int *cmatcnt, int *cmatbeg, int *cmatind,
12215 mpq_t * cmatval, mpq_t * obj, mpq_t * lower,
12216 mpq_t * upper, const char **names),
12217 mpq_QSadd_col ( mpq_QSprob p, int cnt, int *cmatind, mpq_t * cmatval,
12218 mpq_t obj, mpq_t lower, mpq_t upper, const char *name),
12219 mpq_QSnew_row ( mpq_QSprob p,const mpq_t rhs, int sense, const char *name),
12220 mpq_QSadd_ranged_rows ( mpq_QSprob p, int num, int *rmatcnt, int *rmatbeg,
12221 int *rmatind,const mpq_t * rmatval,const mpq_t * rhs, char *sense,
12222 const mpq_t* range, const char **names),
12223 mpq_QSadd_ranged_row ( mpq_QSprob p, int cnt, int *rmatind,const mpq_t * rmatval,
12224 const mpq_t * rhs, int sense,const mpq_t * range, const char *name),
12225 mpq_QSadd_rows ( mpq_QSprob p, int num, int *rmatcnt, int *rmatbeg, int *rmatind,
12226 const mpq_t * rmatval,const mpq_t * rhs, char *sense, const char **names),
12227 mpq_QSadd_row ( mpq_QSprob p, int cnt, int *rmatind,const mpq_t * rmatval,
12228 const mpq_t * rhs, int sense, const char *name),
12229 mpq_QSdelete_rows ( mpq_QSprob p, int num, int *dellist),
12230 mpq_QSdelete_row ( mpq_QSprob p, int rowindex),
12231 mpq_QSdelete_setrows ( mpq_QSprob p, int *flags),
12232 mpq_QSdelete_named_row ( mpq_QSprob p, const char *rowname),
12233 mpq_QSdelete_named_rows_list ( mpq_QSprob p, int num, const char **rownames),
12234 mpq_QSdelete_cols ( mpq_QSprob p, int num, int *dellist),
12235 mpq_QSdelete_col ( mpq_QSprob p, int colindex),
12236 mpq_QSdelete_setcols ( mpq_QSprob p, int *flags),
12237 mpq_QSdelete_named_column ( mpq_QSprob p, const char *colname),
12238 mpq_QSdelete_named_columns_list ( mpq_QSprob p, int num, const char **colnames),
12239 mpq_QSchange_senses ( mpq_QSprob p, int num, int *rowlist, char *sense),
12240 mpq_QSchange_sense ( mpq_QSprob p, int rowindex, int sense),
12241 mpq_QSchange_coef ( mpq_QSprob p, int rowindex, int colindex, mpq_t coef),
12242 mpq_QSchange_objcoef ( mpq_QSprob p, int indx, mpq_t coef),
12243 mpq_QSchange_rhscoef ( mpq_QSprob p, int indx, mpq_t coef),
12244 mpq_QSchange_range(mpq_QSprob p, int rowindex, mpq_t range),
12245 mpq_QSchange_bounds ( mpq_QSprob p, int num, int *collist, char *lu,
12246 const mpq_t * bounds),
12247 mpq_QSchange_bound ( mpq_QSprob p, int indx, int lu,const mpq_t bound),
12248 mpq_QSload_basis ( mpq_QSprob p, mpq_QSbas B),
12249 mpq_QSread_and_load_basis ( mpq_QSprob p, const char *filename),
12250 mpq_QSload_basis_array ( mpq_QSprob p, char *cstat, char *rstat),
12251 mpq_QSload_basis_and_row_norms_array ( mpq_QSprob p, char *cstat, char *rstat,
12252 mpq_t * rownorms),
12253 mpq_QSget_basis_array ( mpq_QSprob p, char *cstat, char *rstat),
12254 mpq_QSget_basis_and_row_norms_array ( mpq_QSprob p, char *cstat, char *rstat,
12255 mpq_t * rownorms),
12256 mpq_QSget_binv_row ( mpq_QSprob p, int indx, mpq_t * binvrow),
12257 mpq_QSget_tableau_row ( mpq_QSprob p, int indx, mpq_t * tableaurow),
12258 mpq_QSget_basis_order ( mpq_QSprob p, int *basorder),
12259 mpq_QSget_coef (mpq_QSprob p, int rowindex, int colindex, mpq_t*coef),
12260 mpq_QSget_status ( mpq_QSprob p, int *status),
12261 mpq_QSget_solution ( mpq_QSprob p, mpq_t * value, mpq_t * x,
12262 mpq_t * pi, mpq_t * slack, mpq_t * rc),
12263 mpq_QSget_objval ( mpq_QSprob p, mpq_t * value),
12264 mpq_QSget_pi_array ( mpq_QSprob p, mpq_t * pi),
12265 mpq_QSget_rc_array ( mpq_QSprob p, mpq_t * rc),
12266 mpq_QSget_x_array ( mpq_QSprob p, mpq_t * x),
12267 mpq_QSget_slack_array ( mpq_QSprob p, mpq_t * slack),
12268 mpq_QSget_infeas_array ( mpq_QSprob p, mpq_t * pi),
12269 mpq_QSget_colcount ( mpq_QSprob p),
12270 mpq_QSget_rowcount ( mpq_QSprob p),
12271 mpq_QSget_nzcount ( mpq_QSprob p),
12272 mpq_QSget_obj_list(mpq_QSprob p, int num, int*collist, mpq_t*obj),
12273 mpq_QSget_obj ( mpq_QSprob p, mpq_t * obj),
12274 mpq_QSget_rhs ( mpq_QSprob p, mpq_t * rhs),
12275 mpq_QSget_ranged_rows_list ( mpq_QSprob p, int num, int *rowlist, int **rowcnt,
12276 int **rowbeg, int **rowind, mpq_t ** rowval, mpq_t ** rhs,
12277 char **sense, mpq_t **range, char ***names),
12278 mpq_QSget_ranged_rows ( mpq_QSprob p, int **rowcnt, int **rowbeg, int **rowind,
12279 mpq_t ** rowval, mpq_t ** rhs, char **sense,
12280 mpq_t ** range, char ***names),
12281 mpq_QSget_senses ( mpq_QSprob p, char*senses),
12282 mpq_QSget_rows_list ( mpq_QSprob p, int num, int *rowlist, int **rowcnt,
12283 int **rowbeg, int **rowind, mpq_t ** rowval, mpq_t ** rhs,
12284 char **sense, char ***names),
12285 mpq_QSget_rows ( mpq_QSprob p, int **rowcnt, int **rowbeg, int **rowind,
12286 mpq_t ** rowval, mpq_t ** rhs, char **sense, char ***names),
12287 mpq_QSget_columns_list ( mpq_QSprob p, int num, int *collist, int **colcnt,
12288 int **colbeg, int **colind, mpq_t ** colval, mpq_t ** obj,
12289 mpq_t ** lower, mpq_t ** upper, char ***names),
12290 mpq_QSget_columns ( mpq_QSprob p, int **colcnt, int **colbeg, int **colind,
12291 mpq_t ** colval, mpq_t ** obj, mpq_t ** lower,
12292 mpq_t ** upper, char ***names),
12293 mpq_QSget_rownames ( mpq_QSprob p, char **rownames),
12294 mpq_QSget_colnames ( mpq_QSprob p, char **colnames),
12295 mpq_QSget_bound ( mpq_QSprob p, int colindex, int lu, mpq_t * bound),
12296 mpq_QSget_bounds ( mpq_QSprob p, mpq_t * lower, mpq_t * upper),
12297 mpq_QSget_bounds_list(mpq_QSprob p, int num, int*collist, mpq_t*lb,
12298 mpq_t*ub),
12299 mpq_QSget_intflags ( mpq_QSprob p, int *intflags),
12300 mpq_QSget_intcount ( mpq_QSprob p, int *count),
12301 mpq_QSget_column_index ( mpq_QSprob p, const char *name, int *colindex),
12302 mpq_QSget_row_index ( mpq_QSprob p, const char *name, int *rowindex),
12303 mpq_QSget_named_x ( mpq_QSprob p, const char *colname, mpq_t * val),
12304 mpq_QSget_named_rc ( mpq_QSprob p, const char *colname, mpq_t * val),
12305 mpq_QSget_named_pi ( mpq_QSprob p, const char *rowname, mpq_t * val),
12306 mpq_QSget_named_slack ( mpq_QSprob p, const char *rowname, mpq_t * val),
12307 mpq_QScompute_row_norms ( mpq_QSprob p),
12308 mpq_QSwrite_prob ( mpq_QSprob p, const char *filename, const char *filetype),
12309 mpq_QSwrite_prob_file ( mpq_QSprob p, FILE * file, const char *filetype),
12310 mpq_QSwrite_basis ( mpq_QSprob p, mpq_QSbas B, const char *filename),
12311 mpq_QStest_row_norms ( mpq_QSprob p),
12312 mpq_QSget_itcnt(mpq_QSprob p, int *pI_iter, int *pII_iter, int *dI_iter,
12313 int *dII_iter, int *tot_iter),
12314 mpq_QSset_param ( mpq_QSprob p, int whichparam, int newvalue),
12315 mpq_QSset_param_EGlpNum ( mpq_QSprob p, int whichparam, mpq_t newvalue),
12316 mpq_QSget_param ( mpq_QSprob p, int whichparam, int *value),
12317 mpq_QSget_param_EGlpNum ( mpq_QSprob p, int whichparam, mpq_t * value);
12318
12319 mpq_QSLIB_INTERFACE char *mpq_QSget_probname ( mpq_QSprob p);
12320 mpq_QSLIB_INTERFACE char *mpq_QSget_objname ( mpq_QSprob p);
12321 mpq_QSLIB_INTERFACE char *mpq_QSversion ( void);
12322
12323 mpq_QSLIB_INTERFACE mpq_QSprob mpq_QScreate_prob ( const char *name, int objsense),
12324 mpq_QSread_prob ( const char *filename, const char *filetype),
12325 mpq_QSload_prob ( const char *probname, int ncols, int nrows, int *cmatcnt,
12326 int *cmatbeg, int *cmatind, mpq_t * cmatval, int objsense,
12327 mpq_t * obj, mpq_t * rhs, char *sense, mpq_t * lower,
12328 mpq_t * upper, const char **colnames, const char **rownames),
12329 mpq_QScopy_prob ( mpq_QSprob p, const char *newname);
12330
12331 mpq_QSLIB_INTERFACE mpq_QSbas mpq_QSget_basis ( mpq_QSprob p),
12332 mpq_QSread_basis ( mpq_QSprob p, const char *filename);
12333
12334 #ifdef __cplusplus
12335 }
12336 #endif
12337
12338
12339
12340
12341
12342
12343
12344
12345
12346
12347
12348
12349
12350
12351
12352
12353
12354
12355 #ifdef WIN32
12356 typedef struct mpq_QSLIB_INTERFACE mpq_qsline_reader *mpq_QSline_reader;
12357 typedef struct mpq_QSLIB_INTERFACE mpq_qsformat_error *mpq_QSformat_error;
12358 typedef struct mpq_QSLIB_INTERFACE mpq_qserror_collector *mpq_QSerror_collector;
12359 typedef struct mpq_QSLIB_INTERFACE mpq_qserror_memory *mpq_QSerror_memory;
12360 #else
12361 typedef struct mpq_qsline_reader *mpq_QSline_reader;
12362 typedef struct mpq_qsformat_error *mpq_QSformat_error;
12363 typedef struct mpq_qserror_collector *mpq_QSerror_collector;
12364 typedef struct mpq_qserror_memory *mpq_QSerror_memory;
12365 #endif
12366
12367 #ifdef __cplusplus
12368 extern "C"
12369 {
12370 #endif
12371 mpq_QSLIB_INTERFACE const char *mpq_QSformat_error_type_string (
12372 int tp);
12373
12374 mpq_QSLIB_INTERFACE int mpq_QSerror_get_type (
12375 mpq_QSformat_error error);
12376 mpq_QSLIB_INTERFACE const char *mpq_QSerror_get_desc (
12377 mpq_QSformat_error error);
12378 mpq_QSLIB_INTERFACE int mpq_QSerror_get_line_number (
12379 mpq_QSformat_error error);
12380 mpq_QSLIB_INTERFACE int mpq_QSerror_get_pos (
12381 mpq_QSformat_error error);
12382 mpq_QSLIB_INTERFACE const char *mpq_QSerror_get_line (
12383 mpq_QSformat_error error);
12384 mpq_QSLIB_INTERFACE void mpq_QSerror_print (
12385 FILE * f,
12386 mpq_QSformat_error error);
12387
12388 mpq_QSLIB_INTERFACE mpq_QSerror_collector mpq_QSerror_collector_new (
12389 void *fct,
12390 void *dest);
12391 mpq_QSLIB_INTERFACE mpq_QSerror_collector mpq_QSerror_memory_collector_new (
12392 mpq_QSerror_memory mem);
12393 mpq_QSLIB_INTERFACE void mpq_QSerror_collector_free (
12394 mpq_QSerror_collector c);
12395
12396
12397
12398
12399 mpq_QSLIB_INTERFACE mpq_QSline_reader mpq_QSline_reader_new (
12400 void *fct,
12401 void *data_src);
12402
12403
12404 mpq_QSLIB_INTERFACE void mpq_QSline_reader_free (
12405 mpq_QSline_reader reader);
12406
12407 mpq_QSLIB_INTERFACE void mpq_QSline_reader_set_error_collector (
12408 mpq_QSline_reader reader,
12409 mpq_QSerror_collector collector);
12410
12411 mpq_QSLIB_INTERFACE char *mpq_QSline_reader_get (
12412 mpq_QSline_reader reader,
12413 char *s,
12414 int size);
12415
12416 mpq_QSLIB_INTERFACE mpq_QSprob mpq_QSget_prob (
12417 mpq_QSline_reader reader,
12418 const char *probname,
12419 const char *filetype);
12420
12421
12422
12423
12424
12425
12426
12427 mpq_QSLIB_INTERFACE mpq_QSerror_memory mpq_QSerror_memory_create (
12428 int takeErrorLines);
12429 mpq_QSLIB_INTERFACE void mpq_QSerror_memory_free (
12430 mpq_QSerror_memory mem);
12431
12432 mpq_QSLIB_INTERFACE int mpq_QSerror_memory_get_nof (
12433 mpq_QSerror_memory mem,
12434 int error_type);
12435 mpq_QSLIB_INTERFACE int mpq_QSerror_memory_get_nerrors (
12436 mpq_QSerror_memory mem);
12437
12438 mpq_QSLIB_INTERFACE mpq_QSformat_error mpq_QSerror_memory_get_last_error (
12439 mpq_QSerror_memory mem);
12440 mpq_QSLIB_INTERFACE mpq_QSformat_error mpq_QSerror_memory_get_prev_error (
12441 mpq_QSformat_error e);
12442
12443
12444
12445
12446 mpq_QSLIB_INTERFACE void mpq_QSset_reporter (
12447 mpq_QSprob prob,
12448 int iterskip,
12449 void *fct,
12450 void *dest);
12451
12452 mpq_QSLIB_INTERFACE int mpq_QSreport_prob (
12453 mpq_QSprob p,
12454 const char *filetype,
12455 mpq_QSerror_collector c);
12456
12457 #ifdef __cplusplus
12458 }
12459 #endif
12460 #endif
12461 #endif
12462 #endif
12463 #ifdef HAVE_LIBGMP
12464 #if HAVE_LIBGMP
12465
12466
12467
12468
12469
12470
12471
12472
12473
12474
12475
12476
12477
12478
12479
12480
12481
12482
12483
12484
12485
12486
12487
12488 #ifndef mpq_QS_FORMAT_ERROR_H
12489 #define mpq_QS_FORMAT_ERROR_H
12490
12491
12492
12493
12494
12495
12496
12497
12498
12499
12500
12501
12502
12503
12504
12505
12506
12507
12508
12509
12510
12511
12512
12513
12514
12515
12516
12517
12518
12519 typedef struct mpq_qsformat_error
12520 {
12521 char *desc;
12522 char *theLine;
12523 struct mpq_qsformat_error *next;
12524 int type;
12525 int lineNumber;
12526 int at;
12527 }
12528 mpq_qsformat_error;
12529
12530 extern int mpq_ILLformat_error_create (
12531 mpq_qsformat_error * error,
12532 int mode,
12533 const char *desc,
12534 int lineNum,
12535 const char *theLine,
12536 int atPos);
12537 extern void mpq_ILLformat_error_delete (
12538 mpq_qsformat_error * error);
12539
12540 extern void mpq_ILLformat_error_print (
12541 EGioFile_t * out,
12542 mpq_qsformat_error * e);
12543
12544
12545
12546
12547
12548
12549
12550
12551
12552 typedef int (
12553 *mpq_qsadd_error_fct) (
12554 void *dest,
12555 const mpq_qsformat_error * error);
12556
12557 typedef struct mpq_qserror_collector
12558 {
12559 mpq_qsadd_error_fct add_error;
12560 void *dest;
12561 }
12562 mpq_qserror_collector;
12563
12564 typedef struct mpq_qserror_memory
12565 {
12566 unsigned int nerror;
12567 mpq_qsformat_error *error_list;
12568 char has_error[QS_INPUT_NERROR];
12569 char hasErrorLines;
12570 }
12571 mpq_qserror_memory;
12572
12573
12574 extern mpq_qserror_collector *mpq_ILLerror_collector_new (
12575 mpq_qsadd_error_fct fct,
12576 void *dest);
12577
12578 mpq_qserror_collector *mpq_ILLerror_memory_collector_new (
12579 mpq_qserror_memory * dest);
12580
12581 extern void mpq_ILLerror_collector_free (
12582 mpq_qserror_collector * c);
12583
12584 #define mpq_ILLformat_error(collector, error) \
12585 ((collector)->add_error((collector)->dest, error))
12586
12587
12588 extern int mpq_ILLadd_error_to_memory (
12589 void *dest,
12590 const mpq_qsformat_error * error);
12591
12592 extern mpq_qserror_memory *mpq_ILLerror_memory_create (
12593 int takeErrorLines);
12594 extern void mpq_ILLerror_memory_free (
12595 mpq_qserror_memory * mem);
12596
12597 #endif
12598 #endif
12599 #endif
12600 #ifdef HAVE_LIBGMP
12601 #if HAVE_LIBGMP
12602
12603
12604
12605
12606
12607
12608
12609
12610
12611
12612
12613
12614
12615
12616
12617
12618
12619
12620
12621
12622
12623
12624
12625 #ifndef mpq___ILL_RAWLP_H_
12626 #define mpq___ILL_RAWLP_H_
12627
12628
12629
12630
12631
12632
12633
12634
12635
12636 #define mpq_ILL_ISBLANK(p) \
12637 (((*(p))==' '||(*(p))=='\t'||(*(p))=='\r'||(*(p))=='\f') ? 1 : 0)
12638
12639
12640
12641
12642
12643
12644 typedef struct mpq_rawlpdata
12645 {
12646 char *name;
12647
12648 char *rhsname;
12649 char *rangesname;
12650 char *boundsname;
12651
12652 int objsense;
12653 int objindex;
12654
12655 int nrows;
12656 ILLsymboltab rowtab;
12657
12658 int sensesize;
12659 char *rowsense;
12660
12661 char *rhsind;
12662
12663 int rhssize;
12664 mpq_t *rhs;
12665 char *rangesind;
12666 struct mpq_colptr *ranges;
12667
12668 int ncols;
12669 ILLsymboltab coltab;
12670 int colsize;
12671 struct mpq_colptr **cols;
12672
12673 char *lbind;
12674 char *ubind;
12675 mpq_t *lower;
12676 mpq_t *upper;
12677
12678 int intsize;
12679 char *intmarker;
12680
12681
12682 char *refrow;
12683 int refrowind;
12684
12685 int is_sos_size;
12686 int *is_sos_member;
12687
12688
12689
12690 int nsos_member;
12691 int sos_weight_size;
12692 mpq_t *sos_weight;
12693
12694 int sos_col_size;
12695 int *sos_col;
12696
12697 int nsos;
12698 int sos_setsize;
12699 struct mpq_sosptr *sos_set;
12700
12701
12702 mpq_qserror_collector *error_collector;
12703 ILLptrworld ptrworld;
12704 }
12705 mpq_rawlpdata;
12706
12707 typedef struct mpq_colptr
12708 {
12709 mpq_t coef;
12710 struct mpq_colptr *next;
12711 int this_val;
12712 }
12713 mpq_colptr;
12714 extern mpq_colptr *mpq_ILLcolptralloc (
12715 ILLptrworld * p);
12716
12717 typedef struct mpq_sosptr
12718 {
12719 int nelem;
12720 int first;
12721 char type;
12722 }
12723 mpq_sosptr;
12724 extern const int mpq_ILL_SOS_TYPE1;
12725 extern const int mpq_ILL_SOS_TYPE2;
12726
12727 extern void mpq_ILLinit_rawlpdata (
12728 mpq_rawlpdata * lp,
12729 mpq_qserror_collector * collector);
12730 extern void mpq_ILLfree_rawlpdata (
12731 mpq_rawlpdata * lp);
12732 extern void mpq_ILLraw_clear_matrix (
12733 mpq_rawlpdata * lp);
12734
12735 extern const char *mpq_ILLraw_rowname (
12736 mpq_rawlpdata * lp,
12737 int i);
12738 extern const char *mpq_ILLraw_colname (
12739 mpq_rawlpdata * lp,
12740 int i);
12741
12742 extern int mpq_ILLraw_add_col (
12743 mpq_rawlpdata * lp,
12744 const char *name,
12745 int intmarker);
12746 extern int mpq_ILLraw_add_row (
12747 mpq_rawlpdata * lp,
12748 const char *name,
12749 int sense,
12750 const mpq_t rhs);
12751
12752 extern int mpq_ILLraw_add_col_coef (
12753 mpq_rawlpdata * lp,
12754 int colind,
12755 int rowind,
12756 mpq_t coef);
12757
12758 extern int mpq_ILLraw_init_ranges (
12759 mpq_rawlpdata * lp);
12760 extern int mpq_ILLraw_init_rhs (
12761 mpq_rawlpdata * lp);
12762
12763 extern int mpq_ILLraw_add_ranges_coef (
12764 mpq_rawlpdata * lp,
12765 int rowind,
12766 mpq_t coef);
12767
12768
12769 extern int mpq_ILLraw_add_sos (
12770 mpq_rawlpdata * lp,
12771 int sos_type);
12772
12773
12774 extern int mpq_ILLraw_add_sos_member (
12775 mpq_rawlpdata * lp,
12776 int colind);
12777
12778
12779 extern int mpq_ILLraw_is_mem_other_sos (
12780 mpq_rawlpdata * lp,
12781 int colind);
12782
12783 extern int mpq_ILLraw_set_rhs_name (
12784 mpq_rawlpdata * lp,
12785 const char *name,
12786 int *skip);
12787 extern int mpq_ILLraw_set_bounds_name (
12788 mpq_rawlpdata * lp,
12789 const char *name,
12790 int *skip);
12791 extern int mpq_ILLraw_set_ranges_name (
12792 mpq_rawlpdata * lp,
12793 const char *name,
12794 int *skip);
12795 extern void mpq_ILLprint_rawlpdata (
12796 mpq_rawlpdata * lp);
12797
12798 extern char *mpq_ILLraw_unique_name (
12799 ILLsymboltab * tab,
12800 char *prefix,
12801 int i);
12802 extern int mpq_ILLraw_fill_in_rownames (
12803 mpq_rawlpdata * lp);
12804
12805 extern int mpq_ILLraw_init_bounds (
12806 mpq_rawlpdata * lp);
12807
12808 extern const char *mpq_ILLraw_set_lowerBound (
12809 mpq_rawlpdata * lp,
12810 int i,
12811 mpq_t bnd);
12812 extern const char *mpq_ILLraw_set_upperBound (
12813 mpq_rawlpdata * lp,
12814 int i,
12815 mpq_t bnd);
12816 extern const char *mpq_ILLraw_set_fixedBound (
12817 mpq_rawlpdata * lp,
12818 int i,
12819 mpq_t bnd);
12820 extern const char *mpq_ILLraw_set_binaryBound (
12821 mpq_rawlpdata * lp,
12822 int i);
12823 extern const char *mpq_ILLraw_set_unbound (
12824 mpq_rawlpdata * lp,
12825 int colind);
12826 extern int mpq_ILLraw_fill_in_bounds (
12827 mpq_rawlpdata * lp);
12828
12829 extern int mpq_ILLraw_first_nondefault_bound (
12830 mpq_ILLlpdata * lp);
12831 extern int mpq_ILLraw_default_lower (
12832 mpq_ILLlpdata * lp,
12833 int i);
12834 extern int mpq_ILLraw_default_upper (
12835 mpq_ILLlpdata * lp,
12836 int i,
12837 int ri);
12838
12839 extern int mpq_ILLrawlpdata_to_lpdata (
12840 mpq_rawlpdata * raw,
12841 mpq_ILLlpdata * lp);
12842
12843 extern int mpq_ILLdata_error (
12844 mpq_qserror_collector * collector,
12845 const char *format,
12846 ...);
12847 extern void mpq_ILLdata_warn (
12848 mpq_qserror_collector * collector,
12849 const char *format,
12850 ...);
12851
12852 #endif
12853 #endif
12854 #endif
12855 #ifdef HAVE_LIBGMP
12856 #if HAVE_LIBGMP
12857
12858
12859
12860
12861
12862
12863
12864
12865
12866
12867
12868
12869
12870
12871
12872
12873
12874
12875
12876
12877
12878
12879
12880 #ifndef mpq_MPS_H
12881 #define mpq_MPS_H
12882
12883
12884
12885
12886
12887
12888
12889 extern const char *mpq_ILLmps_section_name[ILL_MPS_N_SECTIONS + 2];
12890
12891
12892 extern int mpq_ILLread_mps (
12893 mpq_qsline_reader * file,
12894 const char *filename,
12895 mpq_rawlpdata * lp);
12896
12897 extern int mpq_ILLwrite_mps (
12898 mpq_ILLlpdata * lp,
12899 mpq_qserror_collector * collector);
12900
12901
12902
12903 #endif
12904 #endif
12905 #endif
12906 #ifdef HAVE_LIBGMP
12907 #if HAVE_LIBGMP
12908
12909
12910
12911
12912
12913
12914
12915
12916
12917
12918
12919
12920
12921
12922
12923
12924
12925
12926
12927
12928
12929
12930
12931 #ifndef mpq___PRICE_H
12932 #define mpq___PRICE_H
12933
12934
12935 typedef struct mpq_price_res
12936 {
12937 int eindex;
12938 int dir;
12939 int lindex;
12940 int lvstat;
12941 int price_stat;
12942 mpq_t dinfeas;
12943 mpq_t pinfeas;
12944 }
12945 mpq_price_res;
12946
12947 int mpq_ILLprice_test_for_heap (
12948 mpq_lpinfo * const lp,
12949 mpq_price_info * const pinf,
12950 int const nkeys,
12951 mpq_t * keylist,
12952 int const algo,
12953 int const upd),
12954 mpq_ILLprice_build_heap (
12955 mpq_price_info * const pinf,
12956 int const nkeys,
12957 mpq_t * keylist),
12958 mpq_ILLprice_build_pricing_info (
12959 mpq_lpinfo * const lp,
12960 mpq_price_info * const pinf,
12961 int const phase),
12962 mpq_ILLprice_update_pricing_info (
12963 mpq_lpinfo * const lp,
12964 mpq_price_info * const pinf,
12965 int const phase,
12966 mpq_svector * const wz,
12967 int const eindex,
12968 int const lindex,
12969 mpq_t y),
12970 mpq_ILLprice_get_price (
12971 mpq_price_info * const p,
12972 int const phase),
12973 mpq_ILLprice_build_mpartial_info (
12974 mpq_lpinfo * const lp,
12975 mpq_price_info * const pinf,
12976 int const pricetype),
12977 mpq_ILLprice_build_pdevex_norms (
12978 mpq_lpinfo * const lp,
12979 mpq_p_devex_info * const pdinfo,
12980 int const reinit),
12981 mpq_ILLprice_update_pdevex_norms (
12982 mpq_lpinfo * const lp,
12983 mpq_p_devex_info * const pdinfo,
12984 int const eindex,
12985 mpq_t yl),
12986 mpq_ILLprice_build_psteep_norms (
12987 mpq_lpinfo * const lp,
12988 mpq_p_steep_info * const psinfo),
12989 mpq_ILLprice_build_ddevex_norms (
12990 mpq_lpinfo * const lp,
12991 mpq_d_devex_info * const ddinfo,
12992 int const reinit),
12993 mpq_ILLprice_update_ddevex_norms (
12994 mpq_lpinfo * const lp,
12995 mpq_d_devex_info * const ddinfo,
12996 int const eindex,
12997 mpq_t yl),
12998 mpq_ILLprice_build_dsteep_norms (
12999 mpq_lpinfo * const lp,
13000 mpq_d_steep_info * const dsinfo),
13001 mpq_ILLprice_get_dsteep_norms (
13002 mpq_lpinfo * const lp,
13003 int const count,
13004 int *constrowind,
13005 mpq_t * const norms),
13006 mpq_ILLprice_get_rownorms (
13007 mpq_lpinfo * const lp,
13008 mpq_price_info * const pinf,
13009 mpq_t * const rnorms),
13010 mpq_ILLprice_get_colnorms (
13011 mpq_lpinfo * const lp,
13012 mpq_price_info * const pinf,
13013 mpq_t * const cnorms),
13014 mpq_ILLprice_get_newnorms (
13015 mpq_lpinfo * const lp,
13016 int const nelems,
13017 mpq_t * const norms,
13018 int *const matcnt,
13019 int *const matbeg,
13020 int *const matind,
13021 mpq_t * const matval,
13022 int const option),
13023 mpq_ILLprice_get_new_rownorms (
13024 mpq_lpinfo * const lp,
13025 int const newrows,
13026 mpq_t * const rnorms,
13027 int *const rmatcnt,
13028 int *const rmatbeg,
13029 int *const rmatind,
13030 mpq_t * const rmatval),
13031 mpq_ILLprice_get_new_colnorms (
13032 mpq_lpinfo * const lp,
13033 int const newrows,
13034 mpq_t * const rnorms,
13035 int *const matcnt,
13036 int *const matbeg,
13037 int *const matind,
13038 mpq_t * const matval),
13039 mpq_ILLprice_load_rownorms (
13040 mpq_lpinfo * const lp,
13041 mpq_t * const rnorms,
13042 mpq_price_info * const pinf),
13043 mpq_ILLprice_load_colnorms (
13044 mpq_lpinfo * const lp,
13045 mpq_t * const cnorms,
13046 mpq_price_info * const pinf);
13047
13048
13049 void mpq_ILLprice_free_heap (
13050 mpq_price_info * const pinf),
13051 mpq_ILLprice_init_pricing_info (
13052 mpq_price_info * const pinf),
13053 mpq_ILLprice_free_pricing_info (
13054 mpq_price_info * const pinf),
13055 mpq_ILLprice_free_mpartial_info (
13056 mpq_mpart_info * p),
13057 mpq_ILLprice_init_mpartial_price (
13058 mpq_lpinfo * const lp,
13059 mpq_price_info * const pinf,
13060 int const phase,
13061 int const pricetype),
13062 mpq_ILLprice_update_mpartial_price (
13063 mpq_lpinfo * const lp,
13064 mpq_price_info * const pinf,
13065 int const phase,
13066 int const pricetype),
13067 mpq_ILLprice_delete_onempart_price (
13068
13069 mpq_price_info * const pinf,
13070 int const indx,
13071 int const pricetype),
13072 mpq_ILLprice_mpartial_group (
13073 mpq_lpinfo * const lp,
13074 mpq_mpart_info * const p,
13075 int const phase,
13076 int const g,
13077 int const pricetype),
13078 mpq_ILLprice_column (
13079 mpq_lpinfo * const lp,
13080 int const ix,
13081 int const phase,
13082 mpq_price_res * const pr),
13083 mpq_ILLprice_row (
13084 mpq_lpinfo * const lp,
13085 int const ix,
13086 int const phase,
13087 mpq_price_res * const pr),
13088 mpq_ILLprice_update_psteep_norms (
13089 mpq_lpinfo * lp,
13090 mpq_p_steep_info * psinfo,
13091 mpq_svector * wz,
13092 int eindex,
13093 mpq_t yl),
13094 mpq_ILLprice_update_dsteep_norms (
13095 mpq_lpinfo * const lp,
13096 mpq_d_steep_info * const dsinfo,
13097 mpq_svector * const wz,
13098 int const lindex,
13099 mpq_t yl),
13100 mpq_ILLprice_compute_dual_inf (
13101 mpq_lpinfo * const lp,
13102 mpq_price_info * const p,
13103 int *const ix,
13104 int const icnt,
13105 int const phase),
13106 mpq_ILLprice_primal (
13107 mpq_lpinfo * const lp,
13108 mpq_price_info * const pinf,
13109 mpq_price_res * const pr,
13110 int const phase),
13111 mpq_ILLprice_compute_primal_inf (
13112 mpq_lpinfo * const lp,
13113 mpq_price_info * const p,
13114 int *const ix,
13115 int const icnt,
13116 int const phase),
13117 mpq_ILLprice_dual (
13118 mpq_lpinfo * const lp,
13119 mpq_price_info * const pinf,
13120 int const phase,
13121 mpq_price_res * const pr);
13122
13123 void mpq_test_dsteep_norms (
13124 mpq_lpinfo * const lp,
13125 mpq_price_info * const p);
13126
13127 #endif
13128 #endif
13129 #endif
13130 #ifdef HAVE_LIBGMP
13131 #if HAVE_LIBGMP
13132
13133
13134
13135
13136
13137
13138
13139
13140
13141
13142
13143
13144
13145
13146
13147
13148
13149
13150
13151
13152
13153
13154 #ifndef mpq___PRIORITY_H__
13155 #define mpq___PRIORITY_H__
13156
13157
13158
13159
13160
13161
13162 typedef struct mpq_ILLpriority
13163 {
13164 mpq_ILLdheap mpq_heap;
13165 union mpq_ILLpri_data
13166 {
13167 void *data;
13168 int next;
13169 }
13170 *pri_info;
13171 int space;
13172 int freelist;
13173 }
13174 mpq_ILLpriority;
13175
13176 void mpq_ILLutil_priority_free (
13177 mpq_ILLpriority * pri),
13178 mpq_ILLutil_priority_delete (
13179 mpq_ILLpriority * pri,
13180 int handle),
13181 mpq_ILLutil_priority_changekey (
13182 mpq_ILLpriority * pri,
13183 int handle,
13184 mpq_t * newkey),
13185 mpq_ILLutil_priority_findmin (
13186 mpq_ILLpriority * pri,
13187 mpq_t * keyval,
13188 void **en),
13189 mpq_ILLutil_priority_deletemin (
13190 mpq_ILLpriority * pri,
13191 mpq_t * keyval,
13192 void **en);
13193
13194 int mpq_ILLutil_priority_init (
13195 mpq_ILLpriority * pri,
13196 int k),
13197 mpq_ILLutil_priority_insert (
13198 mpq_ILLpriority * pri,
13199 void *data,
13200 mpq_t * keyval,
13201 int *handle);
13202
13203
13204
13205 #endif
13206 #endif
13207 #endif
13208 #ifdef HAVE_LIBGMP
13209 #if HAVE_LIBGMP
13210
13211
13212
13213
13214
13215
13216
13217
13218
13219
13220
13221
13222
13223
13224
13225
13226
13227
13228
13229
13230
13231
13232
13233 #ifndef mpq___RATIO_H
13234 #define mpq___RATIO_H
13235 typedef struct mpq_ratio_res
13236 {
13237 mpq_t tz;
13238 int eindex;
13239 int lindex;
13240 int lvstat;
13241 int ratio_stat;
13242 int boundch;
13243 int coeffch;
13244 mpq_t lbound;
13245 mpq_t ecoeff;
13246 mpq_t pivotval;
13247 }
13248 mpq_ratio_res;
13249
13250 void mpq_ILLratio_pI_test (
13251 mpq_lpinfo * const lp,
13252 int const eindex,
13253 int const dir,
13254 mpq_ratio_res * const rs),
13255 mpq_ILLratio_pII_test (
13256 mpq_lpinfo * const lp,
13257 int const eindex,
13258 int const dir,
13259 mpq_ratio_res * const rs),
13260 mpq_ILLratio_dI_test (
13261 mpq_lpinfo * const lp,
13262 int const lindex,
13263 int const lvstat,
13264 mpq_ratio_res * const rs),
13265 mpq_ILLratio_dII_test (
13266 mpq_lpinfo * const lp,
13267
13268 int const lvstat,
13269 mpq_ratio_res * const rs),
13270 mpq_ILLratio_longdII_test (
13271 mpq_lpinfo * const lp,
13272 int const lindex,
13273 int const lvstat,
13274 mpq_ratio_res * const rs),
13275 mpq_ILLratio_pivotin_test (
13276 mpq_lpinfo * const lp,
13277 int *const rlist,
13278 int const rcnt,
13279 mpq_ratio_res * const rs);
13280
13281 #endif
13282 #endif
13283 #endif
13284 #ifdef HAVE_LIBGMP
13285 #if HAVE_LIBGMP
13286
13287
13288
13289
13290
13291
13292
13293
13294
13295
13296
13297
13298
13299
13300
13301
13302
13303
13304
13305
13306
13307
13308
13309 #ifndef mpq_READ_LP_STATE_H
13310 #define mpq_READ_LP_STATE_H
13311
13312
13313
13314
13315
13316
13317
13318
13319
13320
13321
13322
13323
13324
13325 typedef struct mpq_ILLread_lp_state
13326 {
13327 mpq_qsline_reader *file;
13328 const char *file_name;
13329 char *p;
13330 mpq_t bound_val;
13331 int mpq_interactive;
13332 int line_num;
13333 int column_index;
13334 char realline[ILL_namebufsize];
13335 char line[ILL_namebufsize];
13336 char field[ILL_namebufsize + 1];
13337 char fieldOnFirstCol;
13338 char eof;
13339 char sense_val;
13340 }
13341 mpq_ILLread_lp_state;
13342
13343 extern int mpq_ILLread_lp_state_init (
13344 mpq_ILLread_lp_state * state,
13345 mpq_qsline_reader * file,
13346 const char *mpq_fname,
13347 int interactve);
13348 extern int mpq_ILLread_lp_state_next_line (
13349 mpq_ILLread_lp_state * state);
13350 extern int mpq_ILLread_lp_state_next_var (
13351 mpq_ILLread_lp_state * state);
13352 extern int mpq_ILLread_lp_state_keyword (
13353 mpq_ILLread_lp_state * state,
13354 const char **kwd);
13355 extern int mpq_ILLread_lp_state_bad_keyword (
13356 mpq_ILLread_lp_state * state);
13357 extern int mpq_ILLtest_lp_state_keyword (
13358 mpq_ILLread_lp_state * state,
13359 const char *kwd[]);
13360 extern int mpq_ILLread_lp_state_next_field (
13361 mpq_ILLread_lp_state * state);
13362 extern int mpq_ILLread_lp_state_next_field_on_line (
13363 mpq_ILLread_lp_state * state);
13364 extern void mpq_ILLread_lp_state_prev_field (
13365 mpq_ILLread_lp_state * state);
13366 extern int mpq_ILLread_lp_state_sign (
13367 mpq_ILLread_lp_state * state,
13368 mpq_t * sign);
13369 extern int mpq_ILLread_lp_state_possible_coef (
13370 mpq_ILLread_lp_state * state,
13371 mpq_t * coef,
13372 const mpq_t defValue);
13373
13374
13375
13376 extern int mpq_ILLread_lp_state_possible_bound_value (
13377 mpq_ILLread_lp_state * state);
13378
13379
13380
13381 extern int mpq_ILLread_lp_state_colon (
13382 mpq_ILLread_lp_state * state);
13383 extern int mpq_ILLread_lp_state_has_colon (
13384 mpq_ILLread_lp_state * state);
13385 extern int mpq_ILLread_lp_statxe_has_colon (
13386 mpq_ILLread_lp_state * state);
13387 extern int mpq_ILLread_lp_state_next_constraint (
13388 mpq_ILLread_lp_state * state);
13389 extern int mpq_ILLread_lp_state_sense (
13390 mpq_ILLread_lp_state * state);
13391 extern int mpq_ILLtest_lp_state_sense (
13392 mpq_ILLread_lp_state * state,
13393 int all);
13394 extern void mpq_ILLtest_lp_state_bound_sense (
13395 mpq_ILLread_lp_state * state);
13396 extern int mpq_ILLread_lp_state_value (
13397 mpq_ILLread_lp_state * state,
13398 mpq_t * d);
13399 extern int mpq_ILLtest_lp_state_next_is (
13400 mpq_ILLread_lp_state * state,
13401 const char *str);
13402 extern int mpq_ILLread_lp_state_skip_blanks (
13403 mpq_ILLread_lp_state * state,
13404 int wrapLines);
13405
13406 extern int mpq_ILLcheck_subject_to (
13407 mpq_ILLread_lp_state * state);
13408
13409
13410
13411
13412 extern int mpq_ILLlp_error (
13413 mpq_ILLread_lp_state * state,
13414 const char *format,
13415 ...);
13416 extern void mpq_ILLlp_warn (
13417 mpq_ILLread_lp_state * state,
13418 const char *format,
13419 ...);
13420
13421
13422
13423
13424 extern int mpq_ILLget_value (
13425 char *line,
13426 mpq_t * coef);
13427
13428 #endif
13429 #endif
13430 #endif
13431 #ifdef HAVE_LIBGMP
13432 #if HAVE_LIBGMP
13433
13434
13435
13436
13437
13438
13439
13440
13441
13442
13443
13444
13445
13446
13447
13448
13449
13450
13451
13452
13453
13454
13455
13456 #ifndef mpq_READ_MPS_STATE_H
13457 #define mpq_READ_MPS_STATE_H
13458
13459
13460
13461 typedef struct mpq_ILLread_mps_state_struct
13462 {
13463 int section[ILL_MPS_N_SECTIONS];
13464 ILLmps_section active;
13465 const char *file_name;
13466 mpq_qsline_reader *file;
13467 unsigned int line_num;
13468 unsigned int field_num;
13469 int intvar;
13470 int sosvar;
13471 char line[ILL_namebufsize];
13472 char key[ILL_namebufsize];
13473 char field[ILL_namebufsize];
13474 char *obj;
13475 char *p;
13476 }
13477 mpq_ILLread_mps_state;
13478
13479 extern int mpq_ILLmps_state_init (
13480 mpq_ILLread_mps_state * state,
13481 mpq_qsline_reader * file,
13482 const char *mpq_fname);
13483 extern void mpq_ILLmps_state_clear (
13484 mpq_ILLread_mps_state * state);
13485 extern int mpq_ILLmps_set_section (
13486 mpq_ILLread_mps_state * state,
13487 const ILLmps_section sec);
13488
13489 extern int mpq_ILLmps_next_line (
13490 mpq_ILLread_mps_state * state);
13491 extern int mpq_ILLmps_next_field (
13492 mpq_ILLread_mps_state * state);
13493 extern int mpq_ILLmps_next_coef (
13494 mpq_ILLread_mps_state * state,
13495 mpq_t * coef);
13496 extern int mpq_ILLmps_next_bound (
13497 mpq_ILLread_mps_state * state,
13498 mpq_t * coef);
13499 extern void mpq_ILLmps_check_end_of_line (
13500 mpq_ILLread_mps_state * state);
13501 extern void mpq_ILLmps_set_end_of_line (
13502 mpq_ILLread_mps_state * state);
13503
13504 extern int mpq_ILLmps_int_sos_mode (
13505 mpq_ILLread_mps_state * state);
13506
13507 extern const char *mpq_ILLmps_possibly_blank_name (
13508 const char *field,
13509 mpq_ILLread_mps_state * state,
13510 ILLsymboltab * tab);
13511 extern int mpq_ILLmps_empty_key (
13512 mpq_ILLread_mps_state * state);
13513 extern int mpq_ILLmps_empty_field (
13514 mpq_ILLread_mps_state * state);
13515
13516 extern int mpq_ILLmps_error (
13517 mpq_ILLread_mps_state * state,
13518 const char *format,
13519 ...);
13520 extern void mpq_ILLmps_warn (
13521 mpq_ILLread_mps_state * state,
13522 const char *format,
13523 ...);
13524
13525 #endif
13526 #endif
13527 #endif
13528 #ifdef HAVE_LIBGMP
13529 #if HAVE_LIBGMP
13530
13531
13532
13533
13534
13535
13536
13537
13538
13539
13540
13541
13542
13543
13544
13545
13546
13547
13548
13549
13550
13551
13552
13553
13554 #ifndef mpq___SIMPLEX_H
13555 #define mpq___SIMPLEX_H
13556
13557 struct itcnt_t;
13558 typedef struct mpq_param_info
13559 {
13560 int origalgo;
13561 int pphaseI;
13562 int pphaseII;
13563 int dphaseI;
13564 int dphaseII;
13565 int p_strategy;
13566 int d_strategy;
13567 }
13568 mpq_param_info;
13569
13570 typedef struct mpq_iter_info
13571 {
13572 int newphase;
13573 int nextphase;
13574 int nextstep;
13575 int sdisplay;
13576 int itercnt;
13577 int solstatus;
13578 int curtime;
13579 int rounds;
13580 int chkobj;
13581 int nosolve;
13582 int noprog;
13583 int inner;
13584 int algorithm;
13585 int resumeid;
13586 int pricetype;
13587 int n_restart;
13588 int n_pivot_fail;
13589 mpq_t prevobj;
13590 mpq_t objtol;
13591 mpq_param_info oldinfo;
13592 }
13593 mpq_iter_info;
13594
13595 void mpq_ILLsimplex_init_lpinfo ( mpq_lpinfo * lp),
13596 mpq_ILLsimplex_free_lpinfo ( mpq_lpinfo * lp),
13597 mpq_ILLsimplex_load_lpinfo ( mpq_ILLlpdata * qslp, mpq_lpinfo * lp),
13598 mpq_ILLsimplex_set_bound ( mpq_lpinfo * lp, const mpq_t * objbound, int sense);
13599 void mpq_free_internal_lpinfo ( mpq_lpinfo * lp);
13600 void mpq_init_internal_lpinfo ( mpq_lpinfo * lp);
13601 int mpq_build_internal_lpinfo ( mpq_lpinfo * lp);
13602 int mpq_ILLsimplex_retest_psolution ( mpq_lpinfo * lp, mpq_price_info * p, int phase,
13603 mpq_feas_info * fs),
13604 mpq_ILLsimplex_retest_dsolution ( mpq_lpinfo * lp, mpq_price_info * p, int phase,
13605 mpq_feas_info * fs),
13606 mpq_ILLsimplex_solution ( mpq_lpinfo * lp, mpq_t * xz, mpq_t * piz,
13607 mpq_t * dz, mpq_t * objval),
13608 mpq_ILLsimplex_infcertificate ( mpq_lpinfo * lp, mpq_t * pi),
13609 mpq_ILLsimplex ( mpq_lpinfo * lp, int algorithm, mpq_ILLlp_basis * B,
13610 mpq_price_info * pinf, int *sol_status, int sdisplay, itcnt_t* itcnt),
13611 mpq_ILLsimplex_pivotin ( mpq_lpinfo * lp, mpq_price_info * pinf, int rcnt,
13612 int *rlist, int pivot_opt, int *basis_mod);
13613
13614 #endif
13615 #endif
13616 #endif
13617 #ifdef HAVE_LIBGMP
13618 #if HAVE_LIBGMP
13619
13620
13621
13622
13623
13624
13625
13626
13627
13628
13629
13630
13631
13632
13633
13634
13635
13636
13637
13638
13639
13640
13641
13642 #ifndef mpq_WRITE_LP_STATE_H
13643 #define mpq_WRITE_LP_STATE_H
13644
13645
13646
13647
13648
13649
13650
13651
13652
13653
13654
13655
13656
13657 typedef struct mpq_ILLwrite_lp_state
13658 {
13659 char buf[ILL_namebufsize];
13660 char *p;
13661 int startlen;
13662 int total;
13663 }
13664 mpq_ILLwrite_lp_state;
13665
13666 extern void mpq_ILLwrite_lp_state_init (
13667 mpq_ILLwrite_lp_state * line,
13668 const char *str);
13669 extern void mpq_ILLwrite_lp_state_append (
13670 mpq_ILLwrite_lp_state * line,
13671 const char *str);
13672 extern void mpq_ILLwrite_lp_state_append_coef (
13673 mpq_ILLwrite_lp_state * line,
13674 mpq_t v,
13675 int cnt);
13676
13677
13678
13679
13680 extern void mpq_ILLwrite_lp_state_append_number (
13681 mpq_ILLwrite_lp_state * line,
13682 mpq_t v);
13683 extern void mpq_ILLwrite_lp_state_save_start (
13684 mpq_ILLwrite_lp_state * line);
13685 extern void mpq_ILLwrite_lp_state_start (
13686 mpq_ILLwrite_lp_state * line);
13687
13688 #endif
13689 #endif
13690 #endif
13691 #ifdef HAVE_LIBGMP
13692 #if HAVE_LIBGMP
13693
13694
13695
13696
13697
13698
13699
13700
13701
13702
13703
13704
13705
13706
13707
13708
13709
13710
13711
13712
13713
13714
13715
13716 #ifndef mpq_ILL_LIB_H
13717 #define mpq_ILL_LIB_H
13718
13719
13720
13721
13722
13723
13724
13725
13726
13727
13728
13729
13730
13731
13732 struct itcnt_t;
13733
13734 int mpq_ILLlib_optimize ( mpq_lpinfo * lp, mpq_ILLlp_basis * B, mpq_price_info * pinf, int algo,
13735 int *status, int simplex_display, struct itcnt_t*itcnt),
13736 mpq_ILLlib_cache_solution ( mpq_lpinfo * lp, mpq_ILLlp_cache * C),
13737 mpq_ILLlib_solution ( mpq_lpinfo * lp, mpq_ILLlp_cache * C, mpq_t * val,
13738 mpq_t * x, mpq_t * pi, mpq_t * slack, mpq_t * rc),
13739 mpq_ILLlib_get_x ( mpq_lpinfo * lp, mpq_ILLlp_cache * C, mpq_t * x),
13740 mpq_ILLlib_get_slack ( mpq_lpinfo * lp, mpq_ILLlp_cache * C, mpq_t * slack),
13741 mpq_ILLlib_objval ( mpq_lpinfo * lp, mpq_ILLlp_cache * C, mpq_t * val),
13742 mpq_ILLlib_tableau ( mpq_lpinfo * lp, int row, mpq_t * binv, mpq_t * tabrow),
13743 mpq_ILLlib_basis_order ( mpq_lpinfo * lp, int *header),
13744 mpq_ILLlib_newrow ( mpq_lpinfo * lp, mpq_ILLlp_basis * B,const mpq_t rhs, int sense,
13745 const mpq_t range, const char *name),
13746 mpq_ILLlib_newrows ( mpq_lpinfo * lp, mpq_ILLlp_basis * B, int num,const mpq_t * rhs,
13747 char *sense, const mpq_t * range, const char **names),
13748 mpq_ILLlib_addrow ( mpq_lpinfo * lp, mpq_ILLlp_basis * B, int cnt, int *ind,
13749 const mpq_t * val, const mpq_t rhs, int sense,const mpq_t range,
13750 const char *rowname),
13751 mpq_ILLlib_addrows ( mpq_lpinfo * lp, mpq_ILLlp_basis * B, int num, int *rmatcnt,
13752 int *rmatbeg, int *rmatind,const mpq_t * rmatval,const mpq_t * rhs,
13753 char *sense, const mpq_t * range, const char **names, int *nofactor),
13754 mpq_ILLlib_delrows ( mpq_lpinfo * lp, mpq_ILLlp_basis * B, mpq_ILLlp_cache * C, int num,
13755 int *dellist, int *basis_ok, int *cache_ok),
13756 mpq_ILLlib_newcol ( mpq_lpinfo * lp, mpq_ILLlp_basis * B,const mpq_t obj,
13757 const mpq_t lower,const mpq_t upper, const char *name, int factorok),
13758 mpq_ILLlib_newcols ( mpq_lpinfo * lp, mpq_ILLlp_basis * B, int num, mpq_t * obj,
13759 mpq_t * lower, mpq_t * upper, const char **names, int factorok),
13760 mpq_ILLlib_addcol ( mpq_lpinfo * lp, mpq_ILLlp_basis * B, int cnt, int *ind,
13761 mpq_t * val,const mpq_t obj,const mpq_t lower,const mpq_t upper,
13762 const char *name, int factorok),
13763 mpq_ILLlib_addcols ( mpq_lpinfo * lp, mpq_ILLlp_basis * B, int num, int *cmatcnt,
13764 int *cmatbeg, int *cmatind, mpq_t * cmatval, mpq_t * obj,
13765 mpq_t * lower, mpq_t * upper, const char **names, int factorok),
13766 mpq_ILLlib_delcols ( mpq_lpinfo * lp, mpq_ILLlp_basis * B, int num, int *dellist,
13767 int *basis_ok),
13768 mpq_ILLlib_chgcoef ( mpq_lpinfo * lp, int rowindex, int colindex, mpq_t coef),
13769 mpq_ILLlib_getcoef (mpq_lpinfo *lp, int rowindex, int colindex, mpq_t* coef),
13770 mpq_ILLlib_chgrange (mpq_lpinfo *lp, int indx, mpq_t coef),
13771 mpq_ILLlib_chgsense ( mpq_lpinfo * lp, int num, int *rowlist, char *sense),
13772 mpq_ILLlib_getsenses (mpq_lpinfo *lp, char *senses),
13773 mpq_ILLlib_getrows ( mpq_lpinfo * lp, int num, int *rowlist, int **rowcnt,
13774 int **rowbeg, int **rowind, mpq_t ** rowval, mpq_t ** rhs,
13775 char **sense, mpq_t ** range, char ***names),
13776 mpq_ILLlib_getcols ( mpq_lpinfo * lp, int num, int *collist, int **colcnt,
13777 int **colbeg, int **colind, mpq_t ** colval, mpq_t ** obj,
13778 mpq_t ** lower, mpq_t ** upper, char ***names),
13779 mpq_ILLlib_getobj ( mpq_lpinfo * lp, mpq_t * obj),
13780 mpq_ILLlib_getobj_list (mpq_lpinfo *lp, int num, int* collist, mpq_t* obj),
13781 mpq_ILLlib_chgobj ( mpq_lpinfo * lp, int indx, mpq_t coef),
13782 mpq_ILLlib_getrhs ( mpq_lpinfo * lp, mpq_t * rhs),
13783 mpq_ILLlib_chgrhs ( mpq_lpinfo * lp, int indx, mpq_t coef),
13784 mpq_ILLlib_getintflags ( mpq_lpinfo * lp, int *intflags),
13785 mpq_ILLlib_rownames ( mpq_lpinfo * lp, char **rownames),
13786 mpq_ILLlib_colnames ( mpq_lpinfo * lp, char **colnames),
13787 mpq_ILLlib_colindex ( mpq_lpinfo * lp, const char *name, int *colindex),
13788 mpq_ILLlib_rowindex ( mpq_lpinfo * lp, const char *name, int *rowindex),
13789 mpq_ILLlib_chgbnd ( mpq_lpinfo * lp, int indx, int lu,const mpq_t bnd),
13790 mpq_ILLlib_chgbnds ( mpq_lpinfo * lp, int cnt, int *indx, char *lu, const mpq_t * bnd),
13791 mpq_ILLlib_getbnd ( mpq_lpinfo * lp, int indx, int lu, mpq_t * bnd),
13792 mpq_ILLlib_getbnds ( mpq_lpinfo * lp, mpq_t * lower, mpq_t * upper),
13793 mpq_ILLlib_getbnds_list ( mpq_lpinfo *lp, int num, int*collist, mpq_t *lower,
13794 mpq_t *upper),
13795 mpq_ILLlib_strongbranch ( mpq_lpinfo * lp, mpq_price_info * pinf, int *candidatelist,
13796 int ncand, mpq_t * xlist, mpq_t * downpen, mpq_t * uppen,
13797 int iterations, mpq_t objbound, struct itcnt_t*itcnt),
13798 mpq_ILLlib_getbasis ( mpq_lpinfo * lp, char *cstat, char *rstat),
13799 mpq_ILLlib_loadbasis ( mpq_ILLlp_basis * B, int nstruct, int nrows, char *cstat,
13800 char *rstat),
13801 mpq_ILLlib_readbasis ( mpq_lpinfo * lp, mpq_ILLlp_basis * B, const char *mpq_fname),
13802 mpq_ILLlib_writebasis ( mpq_lpinfo * lp, mpq_ILLlp_basis * B, const char *mpq_fname),
13803 mpq_ILLlib_getrownorms ( mpq_lpinfo * lp, mpq_price_info * pinf, mpq_t * rownorms),
13804 mpq_ILLlib_loadrownorms ( mpq_lpinfo * lp, mpq_price_info * pinf, mpq_t * rownorms),
13805 mpq_ILLlib_recompute_rownorms ( mpq_lpinfo * lp, mpq_price_info * pinf),
13806 mpq_ILLlib_iter ( mpq_lpinfo * lp),
13807 mpq_ILLlib_print_x ( EGioFile_t * fd, mpq_lpinfo * lp, mpq_ILLlp_cache * C, mpq_t * x,
13808 int nonZerosOnly),
13809 mpq_ILLwrite_lp_file ( mpq_ILLlpdata * lp, EGioFile_t * eout, mpq_qserror_collector * c);
13810
13811
13812 extern int mpq_ILLlib_findName (
13813 mpq_ILLlpdata * qslp,
13814 int forRow,
13815 const char *name,
13816 int id,
13817 char buf[ILL_namebufsize]);
13818
13819
13820
13821
13822
13823
13824
13825 int mpq_ILLpresolve_add_logicals (
13826 mpq_ILLlpdata * lp);
13827
13828
13829
13830
13831
13832
13833
13834
13835 int mpq_ILLmip_binary_dfs (
13836 mpq_lpinfo * lp);
13837
13838 #endif
13839 #endif
13840 #endif
13841 #ifdef HAVE_LIBGMP
13842 #if HAVE_LIBGMP
13843
13844
13845
13846
13847
13848
13849
13850
13851
13852
13853
13854
13855
13856
13857
13858
13859
13860
13861
13862
13863
13864
13865
13866 #ifndef mpf___QS_QSTRUCT_H
13867 #define mpf___QS_QSTRUCT_H
13868
13869 typedef struct mpf_qsdata
13870 {
13871 struct mpf_ILLlpdata *qslp;
13872 struct mpf_lpinfo *lp;
13873 struct mpf_price_info *pricing;
13874 struct mpf_ILLlp_basis *basis;
13875 struct mpf_ILLlp_cache *cache;
13876 char *name;
13877 int qstatus;
13878 int factorok;
13879 int simplex_display;
13880 int simplex_scaling;
13881 itcnt_t itcnt;