From cc7285ac4ea7e1a172b863f34268afdb0b3278b2 Mon Sep 17 00:00:00 2001 From: Alinson S Xavier Date: Wed, 29 Jan 2020 11:49:15 -0600 Subject: [PATCH] Add mkdocs --- README.md | 6 +++--- docs/figures | 1 + docs/index.md | 1 + figures/mwss.png | Bin 19162 -> 19989 bytes mkdocs.yml | 2 ++ 5 files changed, 7 insertions(+), 3 deletions(-) create mode 120000 docs/figures create mode 120000 docs/index.md create mode 100644 mkdocs.yml diff --git a/README.md b/README.md index bce1f33..ff2d824 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ MIPLearn ======== -**MIPLearn** is a flexible and extensible framework for *Learning-Enhanced Mixed-Integer Optimization*, an approach aimed at efficiently handling challenging discrete optimization problems that need to be repeatedly solved with only relatively minor changes to the input data. The package uses Machine Learning (ML) to automatically identify patterns in previously solved instances of the problem, or in the solution process itself, and produces hints that can guide a traditional MIP solver towards the optimal solution faster. For particular classes of problems, this approach has been shown to provide significant performance benefits (see [benchmark results](#benchmark-results) and [references](#references) below). +**MIPLearn** is an extensible framework for *Learning-Enhanced Mixed-Integer Optimization*, an approach targeted at discrete optimization problems that need to be repeatedly solved with only minor changes to input data. The package uses Machine Learning (ML) to automatically identify patterns in previously solved instances of the problem, or in the solution process itself, and produces hints that can guide a conventional MIP solver towards the optimal solution faster. For particular classes of problems, this approach has been shown to provide significant performance benefits (see [benchmark results](#benchmark-results) and [references](#references) for more details). Table of Contents ----------------- @@ -40,7 +40,7 @@ Features Installation ------------ -The package is currently available for Python and Pyomo. It can be installed using `pip` as follows: +The package is currently available for Python and Pyomo, although a Julia+JuMP version is planned. It can be installed using `pip` as follows: ```bash pip install git+ssh://git@github.com/iSoron/miplearn.git @@ -212,7 +212,7 @@ To illustrate the performance benefits of MIPLearn, we present a small number of * **ml-exact:** `LearningSolver` with default settings, using Gurobi 9.0 as internal MIP solver * **ml-heuristic:** Same as above, but with `mode="heuristic"` -The experiments were performed on a Linux server (Ubuntu Linux 18.04 LTS) with Intel Xeon Gold 6230s (2 processors, 40 cores, 80 threads) and 256 GB RAM (DDR4, 2933 MHz). All solvers were restricted to use 4 threads, wit no time limits, and 10 instances were solved simultaneously at a time. +The experiments were performed on a Linux server (Ubuntu Linux 18.04 LTS) with Intel Xeon Gold 6230s (2 processors, 40 cores, 80 threads) and 256 GB RAM (DDR4, 2933 MHz). All solvers were restricted to use 4 threads, with no time limits, and 10 instances were solved simultaneously at a time. #### Maximum Weight Stable Set Problem diff --git a/docs/figures b/docs/figures new file mode 120000 index 0000000..1847004 --- /dev/null +++ b/docs/figures @@ -0,0 +1 @@ +../figures/ \ No newline at end of file diff --git a/docs/index.md b/docs/index.md new file mode 120000 index 0000000..32d46ee --- /dev/null +++ b/docs/index.md @@ -0,0 +1 @@ +../README.md \ No newline at end of file diff --git a/figures/mwss.png b/figures/mwss.png index ae2d48dc5b36b0af6c0c4a3f78fc9fe2d2c8ba95..821ffe4b69aae741de81929ef15e7dccbb205877 100644 GIT binary patch literal 19989 zcmeIac{tVW-!{6MN4gs{5V{LRAxUIxk`^*g$xsO)^Gu?;%Uwh*p^|wfRLD$|+@@q) znU%~_=9%}r^!$F$^X~WE$MNpHkK^6@kG+n2SZNL4?{$5K^K+i(<-U@F48wZn^%M$) zfqL$Y3Wc&#ghE+%ZS89OPFl-O)zZk$@v@B}#r(3J)pbj|>n2zBI2hX4npj#0@(J(>9NKfu&dy4dpZ`Dq zp3l<8nEwx>9lI!$JrwGhlWI;c`kS3~)a^eM4G-NdmA<-Jng2jU*6R57Ezhr-Ugo>I z-C|tLxBak?LcEFTg@%v-gP0z(8!=bxb_-rC+p;4@xw`DLj;+~x-W}VN-kmtiUt*J0 z!CuFEs&JLaWLwv~%k=HkxxslhzCAaNcR3#73oPZt#pAJc^oZ#1XYXnw+I~Nak$Jyt z>6yIm?G;N;p0cf4v-IS!#Cpc1Czo8d?OuBFZtMV74iAqWWvitpl}{@h=;T^mntl8DmOcS~nhSx)gt zI7>E7KFPN0OM+_bmsJ@l7c&%whlk&29qRoWen%l#G`he4I#oqp-g|C-KJg$Ag%Wp) z>|xm1(vlJtEv=`n#}6Hnzi{EgYOdwDg7>C&6sP3o9LG{Ro!-5Z;=!Y#r4`4>D!P+3 zvLsU{*{1K%_EL3;&M(1YDKi2TO2|-G>f$BFZM!q~=k3bZC^Y`$y{ACwz$uXnNJxPFQk3_`b!#(_R}US&2`dZ z)#}xH_T;9-HyM-2Qe~04nfunfF~)DdVuFk>o6A_GjJk@-UTXGG{%lREv7+0;bXRY4 zPR88a+*rxMl+2|4(DtqxIVxL$A-i>?yn#-|l3^u2Lvg_g|h}LlG~R zTAWsNTb!TdIdDLUo~--OXDQ7xSH5_^Z0_vIlP8~LEPZ>$|4WI8i#*Xm7Vh&ymM%R7 zIl1bm0tVaI*;B0BKXdQfcl!JH@6RP%-}ctT8(c!^#DfQ0RCBmINSHp-QJQ{Z+Qw~e zxM*Z_RCTB&&;RMuID~)Fh19bG0s^w~@<&Axe0ccZyB)c@G1obD@7}%J*w~Wo`|7wQ zCG}|Jn-rzyYufCVUZ%#j-iP_n@#7cfXD0(WI)48A$09?H*6)yGV{7}+n-pxyiRdeg zKFkSmap(HzDfGYAZB3pMSifO|KaHkxKfWwHF7BWC32pJ4lCGej_@O&iw|r4OZC)}!IA2#rx zqm7J=9CaMj;l1$Y4ExQgaMXuH+?%N^1A=6$Ey?5RzNW0ys_JU~Otnqh$n2=S#NOh{_p`4r|;`RXdiL@gP_snA@(Tu`%K=y`=P;miHKq zLXr<#&hOFhnA18C*cWKO-K*q~<|le@bdcrR+8vAKYSehS^S!fu^Y>rRG~18!4c#%m zlIXxrPYms+7vKJ2!=4kStx=vC8{FysIKkXgQI^&q#8}lgnNF`eo%KB1CiKg;%8xg&oDEHiNb=qiXEmSKJD4aBtpzL4SiVtNP>7CWVK$ z&3b}2>t5Y7lIQKKUG7J-*LGhViSr5OQS0KeAG<_fo0l>A^cY*2e@0=%k1CbBt7m#! z7#YSZL*!Y@#roJ9-?hdBFqoRjXy?nm;G1^3sMgvV^OAi-?a`>W7WsTy?ER9-SB$53 ze5Utu8pq4&KCh|#*!(=y4yAQO31a)y;R&Y zwWgy*W2(A+VXpKwhrfvK%x*c|!U=ii6V8oi{ucQHOL zypol>Mljsl&-mzcJ9M_T?Y&U{$%K8N?Xo@k0)}(j_^IGe^YI+pK zuCT-Gd(6I$y2ZCmk8aNB%$m%nglIpTzRNuS#Ug2^Yw818S)tD0=9%HxH&Hd5{vlmE zy7k2#4Sc;7x;`hAwNxxornNqL(^-eS?r+au#(jz}xZ!fbC&HG!zdYW##Cls#&em15 zs2`zvJqFWvUFJt?Y}yq?9@u?Q9xH7>t}8lGP45bSv7EJpJG0GpaW1c|v_`x(X&`d2 z{Pfrt&7!78UE2EKs_+;3k{Jp+{Cn+`>r)ofa!<{Vd+mE}V{AsP@`-ewDOlWH>3df} zD4{)Zziax}59U3CHtkJMQ(fFXUM}BN6Z64$^B(K_z}%UuGrx>pOvf^{xhUF+^vO78 z4X5fas<{4X{NP1{^RF}Ng-1R;-pV-t%V2sWimM?g#QnWZyK&d7__v^dl+u10PkH#( zuJsRU*mn=wM807g)gJGiIgKwf?r}Eef8|(PA3E@LA<>C9U&=Z;_W-wj&%^UF&7tf? zBOB7KE@tPK@-2SbHGLOr`GYBLEdduE%=`d9&z?OS>?kXfuOD!@d-tvh3en&=;;6SO zTJEl|Cg9JLCr@~aUH&ZOj9$O)m-1lGl}S-{%Ti}W?nNPec79#<&RFv`Ui{gi&yKEt z+jC~-&-u1+Lp8$$x3_1u_e2=p^$k>;3-XCH{9C>C>W*Od6HI2iud2(+K6nt!S3B`K zE^MkdG2q^mA<05b8 zkFJqj@L&f{c%1&0iti=+MsIl(1j*DtdHL=nySk8)Np&cdE>EQac7nB-rDL&U&#a-&DNbY z7dRH!cdSZ|zsHL||50dYsGf5NQ@R;lftF_1qmnmXcaaw5$$nGo&YDfhzotz;6m9f4 zo~grkUOT-&e%CKE+cg=Ly>9!{MuM(SX0H(yQt|wJ(o}`6*rL}_VW&NQ{_R3mQvav2 zib?Zmhlk4#3eQRZ6nT(#P3E3YXNWRhI}_^j@M@|{%f|IL3WRqoVTKrCv%11kd#}QX zu2A=d+{SwwcSZbp`ktEfAxfs{b}#9QNwaAC){blA`CCO75{q5uZ{(^KRV1`JGSbH# z+*#+sPna{WPB`uKh=Y4nEqo!1S64;>-*xunj9Z}9^t4l=W}iy~%|&JQrs!;H6^jp6xR9c!iJ=Tn( ze=i<$Xx_OwO0$lwW?1!Zg5h}89o>CDCsnh)j%R20y683^Y1fn9sT?ACIrXJ5)Z3rt_3p<)=#ebOx(mrpBLbsY;{yY|9k=J?vgu&Tz-n zc%hNodrrRgDZS z@mV1yVs~iqWrNU0mF5P?87IY=XV^rhqg=Cj3-(ZoX}4^WjcEx zqb*SEfDi+>*cauWHL3?Eb0()bI{q?hVvQfide_r0(7v4CGb10WVWW4c_wz3~k=Ye- zd?CVK8_*IdZ3#}U7mjATs@5hB?4z3MRVc30We%)2o_(BqWYs_QG?k?K$vYZz!lil1 z|MXPJxcZo#U~$drdbQ>oV8G{&I{kCnExQJaMWU}5kGKBVPG9{SKzcBDJ3hQUmJx2= zalnR0V#u4U=uHvbmq9_bwZHhjkBoCKPFh&<%VjkdhH&%MK4N63&An+pP~i}#KHp%v zyMMoH*m=Ex5l55bp{p)dKbad?M^(vdkaX$!Qn#KV_n76pSHkJvr zZv=Ns+1Ke>oKsOa`I?shr7G0Y!bZq*^^^bjc&@bhYauO-&hkE|Vl4{t^Y1xab84Aa zv8~7~eHiNI=d68N^k_{@W?#A>ufFsb6=|6oWnOm6^O;FmlFf^Ej*L|BWEcDUGw)Z} zVLG1AuGW7@ebgnr)VxAW^+t&DyV@mSLZSE-TW>SzH1ZE|4MycU+?lD3vR z!}5$3@3eNFn$}2Z(+=Lg(1WZm^|sraFzXn(>n8^O_#)W#IeO;xt22s8O(}D!oY-qM z(@n3qXYC%lhK6(%uhZfEO~f32_T*(X>3oY43+>Ju81e4U6PXI58BskypIxyx+4Az_ zz{dm*&4yw@?L{}AoTf+kBxY7+8C3O-ZQBxEN3(mIIHvacF4x)huTSh8H!a;;JRW4f zqbl0um8fuhBuypoMs8xK(R1>-eowY`HESRXa~khz6pt>K`VYFt&qOUYfUTc7eA1Dv z`q`COm$xrt8{MC896NPryVs3e{(F={ zzGFIrdeP^Tf%bL(Ec91vzv6Aqn``;fZmO5^R#fl()!59pJ7?7?PGL${E#T)A>3 z4RlZ8r%wk21S-3q;xj3xj~+D~V;HK^YPT?VDD1e$p=-J6D|_})4JF>h<=0!XQ&dm$ zDZb|nZ;QLE5Gt88(3oNN&!azS96{wVVPSiceltR}sHrI@x0#;Uv!7SuGd(u+wth}_ zZ<-XFAH6jpfB1piXH2;A+S<=gojP^Yq>2NdqG;ZbR#~kmmGt7pZh#{yt=U4;!Xo)S zm8_-CL15GLfomb_jIpOKcld8=coL;w{B2+5;OvQa|?_NXU!a2>F;%1#PsQE2Id1mix^pH9Of;#7s!VF zX0AA>c=XmL20j)bE2DPHdoK0)n;DO{?B(={$m!?VogPO zWZw>)(|dL*9Mhh~px2M8BeP7Rave5VS6^!-h^yM2VZFP$;mNqcV~+T@zJV5I>M13m zJLrT>Il#js%kDmBoi)B;2j9^>n9V63y;n9JkV=uhLkXHWTTA!M5p3?8Ia`+!U~`&g zI_=cQKfiCh{?=}$fF}uP(-;jkN^RR4PW?x*{&b#Rt3DR)*YG%izo)5wt8Pl-!Nfr6 z&F^o@7KlFI>!H6Y3gYrKR(>g22x}q{Q1ll)rA2{KEiE)Xij{ANr zHl(JHg)tFJLRxWYX?0!FMIqZx`R1Fm z1KG2KISdMzrzr0ZHF&OxcXN7FDd53#`u+D?+Yf2&VP_Au>AQ31PHl#z{`f$nW?^CB zYK|3@uo3(IZ_3-fI&L>Q4mMqQXhI1yDwewVQh32u&DA%!%Kp#vajOh2;Kqt>trPxX zZNE-P1+su|RY$hrZr)lnCxD4N2&N89Wf$)WaB7jdIVcL9WzQmK#`|(AlyqKSxx1Uu z^Km8R-PpowPF=C85l(7ru+_CXV^1O1uMDeWmnW?D^LBY9!|tZ0r>7@s^YibJn=>ZS zv9V?!{#tjoXgMWJcCJfmv2w*G@h}e$%BqzsyBB7M=qSA2KC37(0W|yUG8>nL3-eBI zKarJ>X!~^uAM{2$Njt|O>E0&xZdGE3ntFL`~b-ARh%+4}Mz~J7@n4iR?K+3WBc-H`wUsujDhVoEIUP={O;AtNz;s5!Z~EfYmaFmIy4Z04t* zqTOh@a3ARYI#TD!51D*yMT1>>q60zki*xSZZ-)1aTD6^c<`$zEnv5DvLTI0iPfgh~ zK~5^mvFl$mT5l#sMR5>r4Fp_uPjzg?@X z+!gF^b%t^&H#^;J?0T!l*&<59s#TtA%rK;eICt)vw8593_1<~;(q0NBK>@uZ;LwE# zZ*T7-#)lMwjtxY#zj^ZpeW6p2k%6HW;z()#)?K^eYZEoirha`VTZ(W}2oaC}=bv-s z!D5>0)~yq@?es=0YRBwEsqH+8pl7=|b-CHLLINDWYgSHlRCIJtyRVdnlT#+9mMco9 zz(BVC^LU?q`$J(KF0M{mSIZ-gz*2RKW=q9_5E1K$82M)rAUnB5MYY4j!x2i^9RU}| z#_9Tf?h9S+B!wY==v3M6_}#x~f<$(a!55P^uG+A@+h0>pIat)5yz;|`Q-)Ws#!>ya zT-t7}v6~&pU}4>gif!Lnwo798)7C%{k7d{@_xXzNr9MA=`F3*7VD|dZ>fh9KU@#Nq65o^h&Qth)=A+lb?r+_1`s34m zSw%%Uo~k8k@aj4?+k=7^6lH^)^P}#fWi3Xylql-!DhQ| zsSNGt?Bo#<(Lx%5q_4rwa|Q>6jn%}fCS1%&o)~D1McOA`%&_oxK=lfnQL=K%gg}r8 zAcXCvgq7sYPc*vpC1qSqt-qSC{kspPL67qCN!3nr8O-V$`+9m)agUwpueSH5wF&;D zUO>+Q|E|~Y);!3l{5dD)%o#_U;FI6>y7sGFi?Wvo6Ikc z-+97pV-0kRdos=sJyTz0VioOkXqTnkN($ScY(cAj>D1F@@6vA#O?G|=J%H9G^DW

yf6vz7((Z*Rrpi!NYIUXAzB&A^-U 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 mw*ML8Uc%u2n7KoB%iu;`@aFp1$RFH literal 19162 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