首页 文章

是否有可能让SCIP和python-zibopt在windows下工作?

提问于
浏览
0

最近我想尝试一些开源求解器而不是CPLEX . 我发现PICOS zibopt可能是个不错的选择 . 但是,我只能找到关于如何在windows下正确使用zibopt与python一起工作的说明 . 我下载了scip的windows库(.dll文件),并尝试根据命令“python setup.py install”安装python-zibopt . 总是弹出错误“blockmemshell / memory.h没有这样的文件” . 我觉得这是因为我的编译器,即VS120COMNTOOL,没有找到scip解算器 . 现在我有可能在windows下制作scip工作吗?

1 回答

  • 0

    您是否看过SCIP 3.1.0的当前python接口?它使用SCIP Optimization Suite中的库,因此您无需将另一个LP解算器链接到SCIP . 在Windows上,请尝试此修改后的setup.py文件:

    import sys, os, readline, glob, platform
    from distutils.core import setup
    from distutils.extension import Extension
    from Cython.Distutils import build_ext
    from Cython.Build import cythonize
    
    BASEDIR = os.path.dirname(os.path.abspath(__file__))
    BASEDIR = os.path.dirname(BASEDIR)
    BASEDIR = os.path.dirname(BASEDIR)
    INCLUDEDIR = os.path.join(BASEDIR,'src')
    BASEDIR = os.path.dirname(BASEDIR)
    
    #identify compiler version
    prefix = "MSC v."
    i = sys.version.find(prefix)
    if i == -1:
      raise Exception('cannot determine compiler version')
    i = i + len(prefix)
    s, rest = sys.version[i:].split(" ", 1)
    majorVersion = int(s[:-2]) - 6
    minorVersion = int(s[2:3]) / 10.0
    
    if platform.architecture()[0].find('64')>=0:
      LIBDIR  = os.path.join(BASEDIR,'vc'+str(majorVersion),'scip_spx','x64','Release')
    else:
      LIBDIR  = os.path.join(BASEDIR,'vc'+str(majorVersion),'scip_spx','Release')
    print('BASEDIR='+ BASEDIR)
    print('INCLUDEDIR='+ INCLUDEDIR)
    print('LIBDIR='+ LIBDIR)
    
    def complete(text, state):
      return (glob.glob(text+'*')+[None])[state]
    
    readline.set_completer_delims(' \t\n;')
    readline.parse_and_bind("tab: complete")
    readline.set_completer(complete)
    
    libscipopt = 'lib/libscipopt.so'
    includescip = 'include/scip'
    
    ext_modules = []
    
    ext_modules += [Extension('pyscipopt.scip', [os.path.join('pyscipopt', 'scip.pyx')],
                          #extra_compile_args=['-g', '-O0', '-UNDEBUG'],
                          include_dirs=[INCLUDEDIR],
                          library_dirs=[LIBDIR],
                          #runtime_library_dirs=[os.path.abspath('lib')],
                          libraries=['spx', 'scip_spx'])]
                          #libraries=['scipopt', 'readline', 'z', 'gmp', 'ncurses', 'm'])]
    
    setup(
      name = 'pyscipopt',
      version = '0.1',
      description = 'wrapper for SCIP in Python',
      author = 'Zuse Institute Berlin',
      author_email = 'scip@zib.de',
      license = 'MIT',
      cmdclass = {'build_ext' : build_ext},
      ext_modules = ext_modules,
      packages=['pyscipopt']
    )
    

相关问题