R:安装 cplexAPI 错误
R: Install cplexAPI errors
我正在尝试在 R 中使用 cplexAPI。我遇到了持续的错误。我正在使用 Microsoft R Open 3.3.1 并在 Windows 10 上安装了 IBM ILOG CPLEX Optimization Studio 版本:12.7.0.0。这是我所做的,以及结果。我将详细介绍,希望您能在某处看到我的错误!
- 将 tar 文件解压缩到我桌面上的一个文件夹中。
- 编辑文件:
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
- 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
- 在
Environment Variables
System Variables
Path
中我已经添加了:
%CPLEX_STUDIO_BINARIES127%;
C:\Program Files (x86)\Intel\OpenCL SDK.1\bin\x64;
C:\Program Files (x86)\Intel\OpenCL SDK.1\bin\x86;
C:\Program Files (x86)\Intel\OpenCL SDK.1\bin\Pin;
C:\Program Files (x86)\Intel\OpenCL SDK.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 Server0\Tools\Binn\;
C:\Program Files (x86)\Windows Kits.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
- 我重建包:
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.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'
这些是新错误!
对我来说,您似乎在 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
我遇到了完全相同的问题,虽然尝试了与 post 类似的所有方法,但找不到安装软件包的方法。我不确定问题是否与发布包后 CPLEX 中的版本更改有关。
编辑:我能够确认问题。显然可调用的库元素 addchannel、delchannel 和其他几个元素在版本 12.7 中被删除。这是 link:
在其中一个包的源文件中,已经提到 "R Interface to C API of IBM ILOG CPLEX Version 12.1 to 12.6."
看来降级 cplex 会有帮助。
我在将 CPLEX 与 R 集成并安装 cplexAPI 包时遇到了类似的问题,请参阅 https://cran.r-project.org/web/packages/cplexAPI/
我做的错误很少,首先,问题出现是因为 R 不知道 IBM CPLEX 安装在哪里,所以你必须手动更改 cplexAPI_1.3 中的文件 Makevars.win
。 3.tar.gz 当您尝试从 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),也替换 $
second inside the folder 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,并确保环境变量具有指向 R 安装文件的 PATH,本质上将 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
我花了一些时间才弄明白,但这是我的解决方案:
正如 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: error: expected ')' before 'deprecated' # define CPXDEPRECATEDAPI(version) __declspec(dllimport 已弃用)"
这个错误的解决方法是在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
更改该文件后,只需再次按照说明操作即可。
GNU R 包 cplexAPI:IBM ILOG CPLEXAPI 的 R 接口到 CAPI
cplexAPI 包的安装过程需要知道在哪里
找到 CPLEX 包含目录以及可调用库的位置。
我有一个非常大的混合整数问题需要解决。通过 Rsymphony 访问的 COIN 求解器做得不错,但很难找到可行的解决方案。有人告诉我,IBM cplex 求解器是市场上最好的混合整数编程。
安装 cplex 是一项相对容易的任务。当我尝试从 R 安装 link 时,困难就开始了。要么是 cplexAPI,要么是 Rcplex。你可以搜索一下,发现在常用的地方,有用的信息很少。我联系了开发人员,cplexAPI 的 Jonathan 回复了非常有用的故障排除和说明。
我们(老实说,所有乔纳森)确定以下序列应该正确安装 cplexAPI。首先,阅读说明。
下载后,将 .tar.gz 文件解压到某处。我要在桌面上解压我的。
打开新建的文件夹cplexAPI,你会发现一个标有src的目录。打开该文件夹中的 Makevars.win 文件。我安装了Notepad++,所以我右击Makevars.win然后用Notepad++打开。说明指出,您需要找到这些目录中的每一个并键入它们。它们可能(如果您使用的是任何其他版本,则可能会)。
PKG_CPPFLAGS=-g -D_R_=1 -DUSE_R=1 -I"C:/程序Files/IBM/ILOG/CPLEX_Studio127/cplex/include"
PKG_LIBS=-L"C:/程序Files/IBM/ILOG/CPLEX_Studio127/cplex/bin/x64_win64"-lm -lcplex1270
保存后您需要重新打包 cplexAPI。转到命令行(记住我在桌面上解压了 tar.gz 文件)并使用命令:
3.
一个。转到 C:\Users{{这里是你的名字}}\Documents\R\win-library.5
b。创建一个名为 cplexAPI
的新文件夹
c。在 cplexAPI 中创建另一个名为 libs
的文件夹
d。在 libs 中创建另一个名为 x64
的文件夹
所以,你有这个文件夹 C:\Users{{这里是你的名字}}\Documents\R\win-library。5\cplexAPI\libs\x64
转到 CPLEX 应用程序的安装文件夹 C:\Program Files\IBM\ILOG\CPLEX_Enterprise_Server1210\CPLEX_Studio\cplex\bin\x64_win64 并将文件 cplex12100.dll 复制到文件夹 C:\Users{{这里是你的名字}}\Documents\R\win-library .5\cplexAPI\libs\x64
- R CMD build --no-build-vignettes --no-manual --md5 C:\Users{这里是你的名字}\Desktop\cplexAPI
这将重新打包文件夹,避免您在搜索解决方案时发现的 md5 错误。重新打包成功后,您就可以在命令行安装该包了。
- R CMD 安装 --build --no-multiarch .\cplexAPI_1.3.3.tar.gz
此时,您可能有错误。您正在寻找的关键是这个输出:
'cplexAPI'打包安装为cplexAPI_1.3.3.zip
完成(复杂API)
归功于
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 成功测试
在 64 位 Windows 10 上使用 Rtools 3.5.
示例:
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
我正在尝试在 R 中使用 cplexAPI。我遇到了持续的错误。我正在使用 Microsoft R Open 3.3.1 并在 Windows 10 上安装了 IBM ILOG CPLEX Optimization Studio 版本:12.7.0.0。这是我所做的,以及结果。我将详细介绍,希望您能在某处看到我的错误!
- 将 tar 文件解压缩到我桌面上的一个文件夹中。
- 编辑文件:
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
- 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
- 在
Environment Variables
System Variables
Path
中我已经添加了:
%CPLEX_STUDIO_BINARIES127%;
C:\Program Files (x86)\Intel\OpenCL SDK.1\bin\x64;
C:\Program Files (x86)\Intel\OpenCL SDK.1\bin\x86;
C:\Program Files (x86)\Intel\OpenCL SDK.1\bin\Pin;
C:\Program Files (x86)\Intel\OpenCL SDK.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 Server0\Tools\Binn\;
C:\Program Files (x86)\Windows Kits.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
- 我重建包:
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.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'
这些是新错误!
对我来说,您似乎在 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
我遇到了完全相同的问题,虽然尝试了与 post 类似的所有方法,但找不到安装软件包的方法。我不确定问题是否与发布包后 CPLEX 中的版本更改有关。
编辑:我能够确认问题。显然可调用的库元素 addchannel、delchannel 和其他几个元素在版本 12.7 中被删除。这是 link:
在其中一个包的源文件中,已经提到 "R Interface to C API of IBM ILOG CPLEX Version 12.1 to 12.6."
看来降级 cplex 会有帮助。
我在将 CPLEX 与 R 集成并安装 cplexAPI 包时遇到了类似的问题,请参阅 https://cran.r-project.org/web/packages/cplexAPI/
我做的错误很少,首先,问题出现是因为 R 不知道 IBM CPLEX 安装在哪里,所以你必须手动更改 cplexAPI_1.3 中的文件 Makevars.win
。 3.tar.gz 当您尝试从 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),也替换 $
second inside the folder 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,并确保环境变量具有指向 R 安装文件的 PATH,本质上将 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
我花了一些时间才弄明白,但这是我的解决方案:
正如 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: error: expected ')' before 'deprecated' # define CPXDEPRECATEDAPI(version) __declspec(dllimport 已弃用)"
这个错误的解决方法是在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
更改该文件后,只需再次按照说明操作即可。
GNU R 包 cplexAPI:IBM ILOG CPLEXAPI 的 R 接口到 CAPI
cplexAPI 包的安装过程需要知道在哪里 找到 CPLEX 包含目录以及可调用库的位置。
我有一个非常大的混合整数问题需要解决。通过 Rsymphony 访问的 COIN 求解器做得不错,但很难找到可行的解决方案。有人告诉我,IBM cplex 求解器是市场上最好的混合整数编程。
安装 cplex 是一项相对容易的任务。当我尝试从 R 安装 link 时,困难就开始了。要么是 cplexAPI,要么是 Rcplex。你可以搜索一下,发现在常用的地方,有用的信息很少。我联系了开发人员,cplexAPI 的 Jonathan 回复了非常有用的故障排除和说明。
我们(老实说,所有乔纳森)确定以下序列应该正确安装 cplexAPI。首先,阅读说明。
下载后,将 .tar.gz 文件解压到某处。我要在桌面上解压我的。
打开新建的文件夹cplexAPI,你会发现一个标有src的目录。打开该文件夹中的 Makevars.win 文件。我安装了Notepad++,所以我右击Makevars.win然后用Notepad++打开。说明指出,您需要找到这些目录中的每一个并键入它们。它们可能(如果您使用的是任何其他版本,则可能会)。
PKG_CPPFLAGS=-g -D_R_=1 -DUSE_R=1 -I"C:/程序Files/IBM/ILOG/CPLEX_Studio127/cplex/include" PKG_LIBS=-L"C:/程序Files/IBM/ILOG/CPLEX_Studio127/cplex/bin/x64_win64"-lm -lcplex1270
保存后您需要重新打包 cplexAPI。转到命令行(记住我在桌面上解压了 tar.gz 文件)并使用命令:
3.
一个。转到 C:\Users{{这里是你的名字}}\Documents\R\win-library.5
b。创建一个名为 cplexAPI
的新文件夹c。在 cplexAPI 中创建另一个名为 libs
的文件夹d。在 libs 中创建另一个名为 x64
的文件夹所以,你有这个文件夹 C:\Users{{这里是你的名字}}\Documents\R\win-library。5\cplexAPI\libs\x64
转到 CPLEX 应用程序的安装文件夹 C:\Program Files\IBM\ILOG\CPLEX_Enterprise_Server1210\CPLEX_Studio\cplex\bin\x64_win64 并将文件 cplex12100.dll 复制到文件夹 C:\Users{{这里是你的名字}}\Documents\R\win-library .5\cplexAPI\libs\x64
- R CMD build --no-build-vignettes --no-manual --md5 C:\Users{这里是你的名字}\Desktop\cplexAPI
这将重新打包文件夹,避免您在搜索解决方案时发现的 md5 错误。重新打包成功后,您就可以在命令行安装该包了。
- R CMD 安装 --build --no-multiarch .\cplexAPI_1.3.3.tar.gz
此时,您可能有错误。您正在寻找的关键是这个输出:
'cplexAPI'打包安装为cplexAPI_1.3.3.zip 完成(复杂API)
归功于 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 成功测试
在 64 位 Windows 10 上使用 Rtools 3.5.
示例:
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