【问题标题】:R: Install cplexAPI errorsR:安装 cplexAPI 错误
【发布时间】:2017-01-12 16:44:27
【问题描述】:

我正在尝试在 R 中使用 cplexAPI。我遇到了持续性错误。我正在使用 Microsoft R Open 3.3.1 并在 Windows 10 上安装了 IBM ILOG CPLEX Optimization Studio 版本:12.7.0.0。这是我所做的,以及结果。我将详细说明,希望您能在某处看到我的错误!

  1. 将 tar 文件解压到我桌面上的文件夹中。
  2. 编辑文件:C:\Users\zejas\Desktop\cplexAPI\cplexAPI\src\Makevars.win 说:

PKG_CPPFLAGS=-g -D_R_=1 -DUSE_R=1 -I"$C:\Program Files\IBM\ILOG\CPLEX_Studio127\cplex\include" PKG_LIBS=-L"$C:\Program Files\IBM\ILOG\CPLEX_Studio127\cplex\lib" -lm -lcplex1270

  1. Microsoft 对Reviron.site 文件进行了自己的修改。他们将Rcmd_environ 放入:C:\Program Files\Microsoft\MRO-3.3.1\etc\Rcmd_environ 在该文件中,我添加了底部三行:

## from R.sh R_SHARE_DIR=${R_HOME}/share R_INCLUDE_DIR=${R_HOME}/include R_DOC_DIR=${R_HOME}/doc R_ARCH= ## from Rcmd R_OSTYPE=windows TEXINPUTS=.;${TEXINPUTS};${R_SHARE_DIR}/texmf/tex/latex; BIBINPUTS=.;${BIBINPUTS};${R_SHARE_DIR}/texmf/bibtex/bib; BSTINPUTS=.;${BSTINPUTS};${R_SHARE_DIR}/texmf/bibtex/bst; ## from etc/Renviron # R_PLATFORM='i386-pc-mingw32' R_PAPERSIZE_USER=${R_PAPERSIZE} R_PAPERSIZE=${R_PAPERSIZE-'a4'} # for Rd2dpf, reference manual R_RD4PDF=${R_RD4PDF-'times,inconsolata,hyper'} ## used for options("texi2dvi") # R_TEXI2DVICMD=${R_TEXI2DVICMD-${TEXI2DVI-'texi2dvi'}} ## used by INSTALL, check, build R_GZIPCMD=${R_GZIPCMD-'gzip'} ## Default zip/unzip commands R_UNZIPCMD=${R_UNZIPCMD-'unzip'} R_ZIPCMD=${R_ZIPCMD-'zip'} R_BZIPCMD=${R_BZIPCMD-'bzip2'} ## Default browser # R_BROWSER=${R_BROWSER-'open'} ## Default editor # EDITOR=${EDITOR-${VISUAL-vi}} ## Default pager # PAGER=${PAGER-''} ## Default PDF viewer # R_PDFVIEWER=${R_PDFVIEWER-'open'} # MAKE=${MAKE-make} SED=${SED-sed} # CPLEX_STUDIO_DIR=C:/Program Files/IBM/ILOG/CPLEX_Studio127 CPLEX_STUDIO_LIB=C:/Program Files/IBM/ILOG/CPLEX_Studio127/cplex/bin/x64_win64

  1. Environment VariablesSystem VariablesPath我已经添加了:

%CPLEX_STUDIO_BINARIES127%; C:\Program Files (x86)\Intel\OpenCL SDK\6.1\bin\x64; C:\Program Files (x86)\Intel\OpenCL SDK\6.1\bin\x86; C:\Program Files (x86)\Intel\OpenCL SDK\6.1\bin\Pin; C:\Program Files (x86)\Intel\OpenCL SDK\6.1\bin\GTPin; C:\ProgramData\Oracle\Java\javapath;C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin; C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\libnvvp; C:\Program Files (x86)\Intel\iCLS Client\;C:\Program Files\Intel\iCLS Client\; C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem; C:\Windows\System32\WindowsPowerShell\v1.0\; C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL; C:\Program Files\Intel\Intel(R) Management Engine Components\DAL; C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT; C:\Program Files\Intel\Intel(R) Management Engine Components\IPT; C:\Program Files (x86)\Skype\Phone\; C:\Program Files\MATLAB\R2016b\bin; C:\Program Files\MATLAB\R2016a\bin; C:\Program Files\Microsoft\MRO-3.3.1\bin\x64; C:\Users\zejas\.dnx\bin;C:\Program Files\Microsoft DNX\Dnvm\; C:\Program Files\Microsoft SQL Server\130\Tools\Binn\; C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\; C:\WINDOWS\system32;C:\WINDOWS; C:\WINDOWS\System32\Wbem; C:\WINDOWS\System32\WindowsPowerShell\v1.0\; C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common; C:\Program Files\Git\cmd; C:\Program Files\IBM\ILOG\CPLEX_Studio127\cplex\bin\x64_win64; C:\Program Files\IBM\ILOG\CPLEX_Studio127\cplex\include; C:\Rtools\bin

  1. 我重建了包:

C:\Users\zejas>R CMD build --no-build-vignettes --no-manual --md5 C:\Users\zejas\Desktop\cplexAPI\cplexAPI * checking for file 'C:\Users\zejas\Desktop\cplexAPI\cplexAPI/DESCRIPTION' ... OK * preparing 'cplexAPI': * checking DESCRIPTION meta-information ... OK * cleaning src * checking vignette meta-information ... OK * checking for LF line-endings in source and make files * checking for empty or unneeded directories * adding MD5 file * building 'cplexAPI_1.3.2.tar.gz' Warning: file 'cplexAPI/cleanup' did not have execute permissions: corrected Warning: file 'cplexAPI/configure' did not have execute permissions: corrected

  1. 我尝试安装软件包:

C:\Users\zejas>"C:\Program Files\Microsoft\MRO-3.3.1\bin\x64\R.exe" CMD INSTALL --build --no-multiarch ./cplexAPI.tar.gz * installing to library 'C:/Users/zejas/Documents/R/win-library/3.3' * installing *source* package 'cplexAPI' ... ** package 'cplexAPI' successfully unpacked and MD5 sums checked ** libs c:/Rtools/mingw_64/bin/gcc -m64 -I"C:/PROGRA~1/MICROS~1/MRO-33~1.1/include" -DNDEBUG -g -D_R_=1 -DUSE_R=1 -I":\Program Files\IBM\ILOG\CPLEX_Studio127\cplex\include" -I"C:/swarm/workspace/External- R-3.3.1/vendor/extsoft/include" -O2 -Wall -std=gnu99 -mtune=core2 -c cplexAPI.c -o cplexAPI.o In file included from cplexAPI.h:26:0, from cplexAPI.c:26: cplexR.h:50:27: fatal error: ilcplex/cplex.h: No such file or directory #include <ilcplex/cplex.h> ^ compilation terminated. make: *** [cplexAPI.o] Error 1 Warning: running command 'make -f "Makevars.win" -f "C:/PROGRA~1/MICROS~1/MRO-33~1.1/etc/x64/Makeconf" -f "C:/PROGRA~1/MICROS~1/MRO- 33~1.1/share/make/winshlib.mk" SHLIB="cplexAPI.dll" WIN=64 TCLBIN=64 OBJECTS="cplexAPI.o cplexR.o cplex_checkAPI.o cplex_longparamAPI.o init.o"' had status 2 ERROR: compilation failed for package 'cplexAPI' * removing 'C:/Users/zejas/Documents/R/win-library/3.3/cplexAPI'

该目录中绝对有一个cplex.h 文件!

C:\Program Files\IBM\ILOG\CPLEX_Studio127\cplex\include\ilcplex>dir

 Volume in drive C is OS
 Volume Serial Number is 0A1B-3F26
 Directory of C:\Program    Files\IBM\ILOG\CPLEX_Studio127\cplex\include\ilcplex
01/09/2017  10:43 AM    <DIR>          .
01/09/2017  10:43 AM    <DIR>          ..
01/09/2017  10:43 AM             2,499 annotation.xsd
01/09/2017  10:43 AM            72,321 cplex.h
01/09/2017  10:43 AM             6,429 cplexcheck.h
01/09/2017  10:43 AM             1,703 cplexdistmip.h
01/09/2017  10:43 AM             1,857 cplexdistmipl.h
01/09/2017  10:43 AM             1,857 cplexdistmips.h
01/09/2017  10:43 AM             2,569 cplexdistmipx.h
01/09/2017  10:43 AM            76,659 cplexl.h
01/09/2017  10:43 AM             2,826 cplexremote.h
01/09/2017  10:43 AM             2,944 cplexremotel.h
01/09/2017  10:43 AM           111,312 cplexremotemaster.h
01/09/2017  10:43 AM           107,895 cplexremotemasterl.h
01/09/2017  10:43 AM           107,777 cplexremotemasters.h
01/09/2017  10:43 AM           220,496 cplexremotemasterx.h
01/09/2017  10:43 AM             2,944 cplexremotes.h
01/09/2017  10:43 AM             3,379 cplexremoteworker.h
01/09/2017  10:43 AM             3,505 cplexremoteworkerl.h
01/09/2017  10:43 AM             3,511 cplexremoteworkers.h
01/09/2017  10:43 AM             4,554 cplexremoteworkerx.h
01/09/2017  10:43 AM             3,289 cplexremotex.h
01/09/2017  10:43 AM            76,354 cplexs.h
01/09/2017  10:43 AM           119,712 cplexx.h
01/09/2017  10:43 AM            70,061 cpxconst.h
01/09/2017  10:43 AM               675 ilm.h
01/09/2017  10:43 AM             7,158 ilocarray.h
01/09/2017  10:43 AM           186,959 ilocplex.h
01/09/2017  10:43 AM           205,973 ilocplexi.h
01/09/2017  10:43 AM            13,174 iloextrmgr.h
01/09/2017  10:43 AM            13,496 ilogoals.h
01/09/2017  10:43 AM            15,241 iloparam.h
01/09/2017  10:43 AM             5,705 solution.xsd
01/09/2017  10:43 AM             5,504 solution.xsl
01/09/2017  10:43 AM             1,397 vmc.dtd
01/09/2017  10:43 AM             2,837 vmc.xsd
34 File(s)      1,464,572 bytes
2 Dir(s)  333,053,566,976 bytes free

有什么想法吗?


使用来自 @c0bra 和 @rkersh 的输入进行更新

我更新Makevars.win

PKG_CPPFLAGS=-g -D_R_=1 -DUSE_R=1 -I"C:\Program Files\IBM\ILOG\CPLEX_Studio127\cplex\include"
PKG_LIBS=-L"C:\Program Files\IBM\ILOG\CPLEX_Studio127\cplex\lib" -lm -lcplex1270

在命令行重建:

C:\Users\zejas>R CMD build --no-build-vignettes --no-manual  --md5     C:\Users\zejas\Desktop\cplexAPI\cplexAPI
* checking for file 'C:\Users\zejas\Desktop\cplexAPI\cplexAPI/DESCRIPTION' ... OK
* preparing 'cplexAPI':
* checking DESCRIPTION meta-information ... OK
* cleaning src
* checking vignette meta-information ... OK
* checking for LF line-endings in source and make files
* checking for empty or unneeded directories
* adding MD5 file
* building 'cplexAPI_1.3.2.tar.gz'
Warning: file 'cplexAPI/cleanup' did not have execute permissions: corrected
Warning: file 'cplexAPI/configure' did not have execute permissions: corrected

我尝试从命令行安装:

C:\Users\zejas>"C:\Program Files\Microsoft\MRO-3.3.1\bin\x64\R.exe" CMD  INSTALL --build --no-multiarch .\cplexAPI_1.3.2.tar.gz
* installing to library 'C:/Users/zejas/Documents/R/win-library/3.3'
* installing *source* package 'cplexAPI' ...
** package 'cplexAPI' successfully unpacked and MD5 sums checked
** libs
c:/Rtools/mingw_64/bin/gcc -m64 -I"C:/PROGRA~1/MICROS~1/MRO-33~1.1/include" -DNDEBUG -g -D_R_=1 -DUSE_R=1 -I"C:\Program Files\IBM\ILOG\CPLEX_Studio127\cplex\include"    -I"C:/swarm/workspace/External-R-3.3.1/vendor/extsoft/include"     -O2 -Wall  -std=gnu99 -mtune=core2 -c cplexAPI.c -o cplexAPI.o
cplexAPI.c: In function 'addChannel':
cplexAPI.c:5198:5: warning: implicit declaration of function 'CPXaddchannel' [-Wimplicit-function-declaration]
     newch = CPXaddchannel(R_ExternalPtrAddr(env));
     ^
cplexAPI.c:5198:11: warning: assignment makes pointer from integer without a cast
     newch = CPXaddchannel(R_ExternalPtrAddr(env));
           ^
cplexAPI.c: In function 'delChannel':
cplexAPI.c:5234:5: warning: implicit declaration of function 'CPXdelchannel' [-Wimplicit-function-declaration]
     CPXdelchannel(R_ExternalPtrAddr(env), &delch);
     ^
c:/Rtools/mingw_64/bin/gcc -m64 -I"C:/PROGRA~1/MICROS~1/MRO-33~1.1/include" -DNDEBUG -g -D_R_=1 -DUSE_R=1 -I"C:\Program Files\IBM\ILOG\CPLEX_Studio127\cplex\include"    -I"C:/swarm/workspace/External-R-3.3.1/vendor/extsoft/include"     -O2 -Wall  -std=gnu99 -mtune=core2 -c cplexR.c -o cplexR.o
c:/Rtools/mingw_64/bin/gcc -m64 -I"C:/PROGRA~1/MICROS~1/MRO-33~1.1/include" -DNDEBUG -g -D_R_=1 -DUSE_R=1 -I"C:\Program Files\IBM\ILOG\CPLEX_Studio127\cplex\include"    -I"C:/swarm/workspace/External-R-3.3.1/vendor/extsoft/include"     -O2 -Wall  -std=gnu99 -mtune=core2 -c cplex_checkAPI.c -o cplex_checkAPI.o
c:/Rtools/mingw_64/bin/gcc -m64 -I"C:/PROGRA~1/MICROS~1/MRO-33~1.1/include" -DNDEBUG -g -D_R_=1 -DUSE_R=1 -I"C:\Program Files\IBM\ILOG\CPLEX_Studio127\cplex\include"    -I"C:/swarm/workspace/External-R-3.3.1/vendor/extsoft/include"     -O2 -Wall  -std=gnu99 -mtune=core2 -c cplex_longparamAPI.c -o cplex_longparamAPI.o
c:/Rtools/mingw_64/bin/gcc -m64 -I"C:/PROGRA~1/MICROS~1/MRO-33~1.1/include" -DNDEBUG -g -D_R_=1 -DUSE_R=1 -I"C:\Program Files\IBM\ILOG\CPLEX_Studio127\cplex\include"    -I"C:/swarm/workspace/External-R-3.3.1/vendor/extsoft/include"     -O2 -Wall  -std=gnu99 -mtune=core2 -c init.c -o init.o
c:/Rtools/mingw_64/bin/gcc -m64 -shared -s -static-libgcc -o cplexAPI.dll tmp.def cplexAPI.o cplexR.o cplex_checkAPI.o cplex_longparamAPI.o init.o -LC:\Program Files\IBM\ILOG\CPLEX_Studio127\cplex\lib -lm -lcplex1270 -LC:/swarm/workspace/External-R-3.3.1/vendor/extsoft/lib/x64 -LC:/swarm/workspace/External-R-3.3.1/vendor/extsoft/lib -LC:/PROGRA~1/MICROS~1/MRO-33~1.1/bin/x64 -lR
C:/Rtools/mingw_64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.3/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lcplex1270
collect2.exe: error: ld returned 1 exit status
no DLL was created
ERROR: compilation failed for package 'cplexAPI'
* removing 'C:/Users/zejas/Documents/R/win-library/3.3/cplexAPI'

我编辑 Makevars.win

PKG_CPPFLAGS=-g -D_R_=1 -DUSE_R=1 -I"C:/PROGRA~1/IBM/ILOG/CPLEX_Studio127/cplex/include"
PKG_LIBS=-L"C:/PROGRA~1/IBM/ILOG/CPLEX_Studio127/cplex/include/lib" -lm -lcplex1270

我重建:

C:\Users\zejas>R CMD build --no-build-vignettes --no-manual  --md5 C:\Users\zejas\Desktop\cplexAPI\cplexAPI
* checking for file 'C:\Users\zejas\Desktop\cplexAPI\cplexAPI/DESCRIPTION' ... OK
* preparing 'cplexAPI':
* checking DESCRIPTION meta-information ... OK
* cleaning src
* checking vignette meta-information ... OK
* checking for LF line-endings in source and make files
* checking for empty or unneeded directories
* adding MD5 file
* building 'cplexAPI_1.3.2.tar.gz'
Warning: file 'cplexAPI/cleanup' did not have execute permissions: corrected
Warning: file 'cplexAPI/configure' did not have execute permissions: corrected

我尝试安装:

C:\Users\zejas>"C:\Program Files\Microsoft\MRO-3.3.1\bin\x64\R.exe" CMD  INSTALL --build --no-multiarch .\cplexAPI_1.3.2.tar.gz
* installing to library 'C:/Users/zejas/Documents/R/win-library/3.3'
* installing *source* package 'cplexAPI' ...
** package 'cplexAPI' successfully unpacked and MD5 sums checked
** libs
c:/Rtools/mingw_64/bin/gcc -m64 -I"C:/PROGRA~1/MICROS~1/MRO-33~1.1/include" -DNDEBUG -g -D_R_=1 -DUSE_R=1 -I"C:/PROGRA~1/IBM/ILOG/CPLEX_Studio127/cplex/include"    -I"C:/swarm/workspace/External-R-3.3.1/vendor/extsoft/include"     -O2 -Wall  -std=gnu99 -mtune=core2 -c cplexAPI.c -o cplexAPI.o
cplexAPI.c: In function 'addChannel':
cplexAPI.c:5198:5: warning: implicit declaration of function 'CPXaddchannel' [-Wimplicit-function-declaration]
     newch = CPXaddchannel(R_ExternalPtrAddr(env));
     ^
cplexAPI.c:5198:11: warning: assignment makes pointer from integer without a cast
     newch = CPXaddchannel(R_ExternalPtrAddr(env));
           ^
cplexAPI.c: In function 'delChannel':
cplexAPI.c:5234:5: warning: implicit declaration of function 'CPXdelchannel' [-Wimplicit-function-declaration]
     CPXdelchannel(R_ExternalPtrAddr(env), &delch);
     ^
c:/Rtools/mingw_64/bin/gcc -m64 -I"C:/PROGRA~1/MICROS~1/MRO-33~1.1/include" -DNDEBUG -g -D_R_=1 -DUSE_R=1 -I"C:/PROGRA~1/IBM/ILOG/CPLEX_Studio127/cplex/include"    -I"C:/swarm/workspace/External-R-3.3.1/vendor/extsoft/include"     -O2 -Wall  -std=gnu99 -mtune=core2 -c cplexR.c -o cplexR.o
c:/Rtools/mingw_64/bin/gcc -m64 -I"C:/PROGRA~1/MICROS~1/MRO-33~1.1/include" -DNDEBUG -g -D_R_=1 -DUSE_R=1 -I"C:/PROGRA~1/IBM/ILOG/CPLEX_Studio127/cplex/include"    -I"C:/swarm/workspace/External-R-3.3.1/vendor/extsoft/include"     -O2 -Wall  -std=gnu99 -mtune=core2 -c cplex_checkAPI.c -o cplex_checkAPI.o
c:/Rtools/mingw_64/bin/gcc -m64 -I"C:/PROGRA~1/MICROS~1/MRO-33~1.1/include" -DNDEBUG -g -D_R_=1 -DUSE_R=1 -I"C:/PROGRA~1/IBM/ILOG/CPLEX_Studio127/cplex/include"    -I"C:/swarm/workspace/External-R-3.3.1/vendor/extsoft/include"     -O2 -Wall  -std=gnu99 -mtune=core2 -c cplex_longparamAPI.c -o cplex_longparamAPI.o
c:/Rtools/mingw_64/bin/gcc -m64 -I"C:/PROGRA~1/MICROS~1/MRO-33~1.1/include" -DNDEBUG -g -D_R_=1 -DUSE_R=1 -I"C:/PROGRA~1/IBM/ILOG/CPLEX_Studio127/cplex/include"    -I"C:/swarm/workspace/External-R-3.3.1/vendor/extsoft/include"     -O2 -Wall  -std=gnu99 -mtune=core2 -c init.c -o init.o
c:/Rtools/mingw_64/bin/gcc -m64 -shared -s -static-libgcc -o cplexAPI.dll tmp.def cplexAPI.o cplexR.o cplex_checkAPI.o cplex_longparamAPI.o init.o -LC:/PROGRA~1/IBM/ILOG/CPLEX_Studio127/cplex/include/lib -lm -lcplex1270 -LC:/swarm/workspace/External-R-3.3.1/vendor/extsoft/lib/x64 -LC:/swarm/workspace/External-R-3.3.1/vendor/extsoft/lib -LC:/PROGRA~1/MICROS~1/MRO-33~1.1/bin/x64 -lR
C:/Rtools/mingw_64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.3/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lcplex1270
collect2.exe: error: ld returned 1 exit status
no DLL was created
ERROR: compilation failed for package 'cplexAPI'
* removing 'C:/Users/zejas/Documents/R/win-library/3.3/cplexAPI'

这些是新错误!

【问题讨论】:

    标签: r compilation cplex


    【解决方案1】:

    对我来说,看起来您在 Makevars.win 文件的路径前留下了 $ 符号。请尝试更正为:

    PKG_CPPFLAGS=-g -D_R_=1 -DUSE_R=1 -I"C:\Program Files\IBM\ILOG\CPLEX_Studio127\cplex\include"
    PKG_LIBS=-L"C:\Program Files\IBM\ILOG\CPLEX_Studio127\cplex\lib" -lm -lcplex1270
    

    edit2:正如baydoganm 指出的那样,cplex 1270 中缺少两个函数。删除这些函数时,cplexAPI 也可以在 Windows 上正常编译: cplexAPI_1.3.3.tar.gz

    【讨论】:

    • 我真的希望这会奏效。我试过了,得到了同样的错误。该项目的开发人员也在他的说明中有$谢谢!
    • 在最终安装输出中,您可以看到包含路径中缺少“C”(例如,-I":\Program Files\IBM\ILOG\CPLEX_Studio127\cplex\include")。此外,在输出中,其他路径似乎正在使用正斜杠。这些只是在黑暗中拍摄,但也许可以尝试在您的Makevars.win 中使用PKG_CPPFLAGS=-g -D_R_=1 -DUSE_R=1 -I"C:/Program Files/IBM/ILOG/CPLEX_Studio127/cplex/include" 等。另外,您可以尝试在此处使用C:/PROGRA~1 而不是C:/Program Files,这样您就没有任何空格......
    • @rkersh 我也一直想知道输出中缺少C 以及空间。令人困惑的是C 在输入中。所以我尝试了你对C:/PROGRA~1 的想法,并将它与@c0bra 结合起来并删除了$。这些组合都不起作用。你对空间的关注让我想知道环境变量。谢谢!
    • sry,我忘了删除“include”后面的“ilclplex”
    【解决方案2】:

    我遇到了完全相同的问题,尽管尝试了与此处帖子类似的所有方法,但找不到安装软件包的方法。我不确定问题是否与发布包后 CPLEX 中的版本更改有关。

    编辑:我能够确认问题。显然,可调用的库元素 addchannel、delchannel 以及其他几个元素在 12.7 版中被删除。这是链接:

    http://www.ibm.com/support/knowledgecenter/SSSA5P_12.7.0/ilog.odms.cplex.help/CPLEX/ReleaseNotes/topics/releasenotes127/removed.html

    在包的一个源文件中,已经提到“R Interface to C API of IBM ILOG CPLEX Version 12.1 to 12.6”。

    看起来降级 cplex 会有所帮助。

    【讨论】:

      【解决方案3】:

      在将 CPLEX 与 R 集成并安装 cplexAPI 包时,我遇到了类似的问题,请参阅https://cran.r-project.org/web/packages/cplexAPI/ 我做的错误很少,首先,问题出现是因为R不知道IBM CPLEX安装在哪里,所以你必须手动更改cplexAPI_1.3.3.tar.gz包中的文件Makevars.win,即在您尝试从 rstudio GUI 安装 cplexAPI 时下载。 查找以下代码:

      PKG_CPPFLAGS=-g -D_R_=1 -DUSE_R=1 -I"${CPLEX_STUDIO_DIR}\cplex\include"
      PKG_LIBS=-L"${CPLEX_STUDIO_LIB}" -lm -lcplex1261
      

      您需要检查的两件事是 -L"${CPLEX_STUDIO_LIB}" 在我的情况下被替换为 -L"C:/Program Files/IBM/ILOG/CPLEX_Studio1271/cplex/bin/x64_win64" (参见 bin/x64_win64) ,也替换为 $

      在文件夹x64_win64中的第二个,寻找cplex12**.dll文件,这是-lcplex1261指向的文件,这里手动将-lcplex1261更改为您的文件名(在我的情况下是cplex1271.dll,所以我更改了-lcplex1261 到 -lcplex1271,

      同样${CPLEX_STUDIO_DIR} 必须替换为C:/Program Files/IBM/ILOG/CPLEX_Studio1271(在我的情况下)。

      在此之后,按照https://www.r-bloggers.com/using-cplex-in-r-installing-cplexapi-in-windows-10/ 中给出的说明进行操作, 基本上使用以下命令(从命令行)重新打包和安装 cplexAPI_1.3.3.tar.gz (确保您已安装 Rtools,并确保环境变量的 PATH 指向 R 的安装文件,本质上是 R.exe 和Rcmd.exe 用于运行命令),以及

      R CMD build --no-build-vignettes --no-manual --md5 C:\Users{computer name here}\Desktop\cplexAPI
      
      R CMD INSTALL --build --no-multiarch .\cplexAPI_1.3.3.tar.gz
      

      【讨论】:

        【解决方案4】:

        我花了一些时间才弄清楚,但这是我的解决方案:

        正如 user3575499 已经指出的那样,https://www.r-bloggers.com/2017/01/using-cplex-in-r-installing-cplexapi-in-windows-10/ 有一个关于如何安装 cplexAPI 的很好的解释。

        但是,按照这些说明操作后,您可能会收到以下错误:

        "C:\Program Files\IBM\ILOG\CPLEX_Studio_Community129\cplex\include/ilcplex/cpxconst.h:243:62: 错误:预期为 ')' before 'deprecated' #define CPXDEPRECATEDAPI(version) __declspec(dllimport deprecated )"

        这个错误的解决方法是在Makevars.win的第一行末尾添加“-DBUILD_CPXSTATIC”,使文件看起来像这样:

        PKG_CPPFLAGS=-g -D_R_=1 -DUSE_R=1 -I"${CPLEX_STUDIO_DIR}\cplex\include" -DBUILD_CPXSTATIC
        PKG_LIBS=-L"${CPLEX_STUDIO_LIB}" -lm -lcplex1261
        

        更改该文件后,只需再次按照说明操作即可。

        【讨论】:

          【解决方案5】:

          GNU R 包 cplexAPI:IBM ILOG CPLEX 的 C API 的 R 接口

          cplexAPI 包的安装过程需要知道在哪里 找到 CPLEX 包含目录以及可调用库的位置。

          我有一个非常大的混合整数问题要解决。通过 Rsymphony 访问的 COIN 求解器做得不错,但很难找到可行的解决方案。有人告诉我,IBM cplex 求解器是市场上最好的混合整数编程。

          安装 cplex 是一项相对容易的任务。当我尝试从 R 安装链接时,困难就开始了。cplexAPI 或 Rcplex。您可以搜索并看到在通常的地方几乎没有有用的信息。我联系了开发人员,cplexAPI 的 Jonathan 回复了非常有用的故障排除和说明。

          我们(老实说,都是 Jonathan)确定以下顺序应该正确安装 cplexAPI。首先,阅读说明。

          1. 下载后,在某处解压 .tar.gz 文件。我要在桌面上解压。

          2. 打开新创建的文件夹 cplexAPI,你会发现一个标有 src 的目录。打开该文件夹中的 Makevars.win 文件。我已经安装了 Notepad++,所以我右键单击 Makevars.win 并使用 Notepad++ 打开。说明指出,您需要找到每个目录并输入它们。它们可能会(如果您使用任何其他版本,可能会这样做)。

          PKG_CPPFLAGS=-g -D_R_=1 -DUSE_R=1 -I"C:/Program Files/IBM/ILOG/CPLEX_Studio127/cplex/include" PKG_LIBS=-L"C:/Program Files/IBM/ILOG/CPLEX_Studio127/cplex/bin/x64_win64" -lm -lcplex1270

          保存后您需要重新打包 cplexAPI。转到命令行(记住我在桌面上解压了 tar.gz 文件)并使用命令:

          3.

          一个。转到 C:\Users{{你的名字在这里}}\Documents\R\win-library\3.5

          b.创建一个名为 cplexAPI 的新文件夹

          c。在 cplexAPI 中创建另一个名为 libs 的文件夹

          d。在名为 x64 的库中创建另一个文件夹

          所以,你有这个文件夹 C:\Users{{your name here}}\Documents\R\win-library\3.5\cplexAPI\libs\x64

          转到 CPLEX 应用程序的安装文件夹 C:\Program Files\IBM\ILOG\CPLEX_Enterprise_Server1210\CPLEX_Studio\cplex\bin\x64_win64 并将文件 cplex12100.dll 复制到文件夹 C:\Users{{your name here} }\Documents\R\win-library\3.5\cplexAPI\libs\x64

          1. R CMD build --no-build-vignettes --no-manual --md5 C:\Users{your name here}\Desktop\cplexAPI

          这将重新打包文件夹,避免您在搜索解决方案时发现的 md5 错误。成功重新打包后,您可以在命令行安装包。

          1. R CMD INSTALL --build --no-multiarch .\cplexAPI_1.3.3.tar.gz

          此时,您可能会遇到错误。您正在寻找的关键是这个输出:

          “cplexAPI”的打包安装为 cplexAPI_1.3.3.zip 完成(cplexAPI)

          归功于 https://jholderieath.wordpress.com/2017/01/26/using-cplex-in-r-installing-cplexapi-in-windows-10/ https://github.com/cran/cplexAPI/blob/master/inst/INSTALL

          此过程已通过 IBM ILOG CPLEX 12.10 成功测试
          在使用 Rtools 3.5 的 64 位 Windows 10 上。

          例子:

          library(cplexAPI)
           env <- openEnvCPLEX()
           prob <- initProbCPLEX(env)
           chgProbNameCPLEX(env, prob, "sample")
          nc <- 3
           nr <- 3
           obj <- c(5, 4, 3)
           rhs <- c(5, 11, 8)
           sense <- rep("L", 3)
           lb <- rep(0, 3)
          ub <- rep(CPX_INFBOUND, 3)
           cn <- c("x1", "x2", "x3")
           
          rn <- c("q1", "q2", "q3")
          beg <- c(0, 3, 6)
          
          beg <- c(0, 3, 6)
          
           cnt <- rep(3, 3)
           ind <- c(0, 1, 2, 0, 1, 2, 0, 1, 2)
           val <- c(2, 4, 3, 3, 1, 4, 1, 2, 2)
          
          copyLpwNamesCPLEX(env, prob, nc, nr, CPX_MAX, obj, rhs, sense, beg, cnt, ind, val, lb, ub, NULL, cn, rn)
          lpoptCPLEX(env, prob)
           solutionCPLEX(env, prob)
          

          https://github.com/bayesteecal/cplexAPI/blob/master/inst/INSTALL

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-08-14
            • 2015-08-23
            • 2018-03-04
            • 1970-01-01
            相关资源
            最近更新 更多