RStudio - Reticulate - [WinError 6] The handle is invalid

Hello community,
I tried to run the following code in RStudio with reticulate and pyomo based on the solver "glpk". The Python-code is working if I execute the code independently of RStudio. Executing the code in the console (R.exe) also works. However, executing the code in RStudio fails (see below). Thanks in advance for your help!

Br, Alex

Python-based example from: Jupyter Notebook Viewer

Code in Python

from pyomo.environ import *
import pyutilib.subprocess.GlobalData
pyutilib.subprocess.GlobalData.DEFINE_SIGNAL_HANDLERS_DEFAULT = False
model = ConcreteModel()
model.i = Set(initialize=['seattle','san-diego'], doc='Canning plans')
model.j = Set(initialize=['new-york','chicago', 'topeka'], doc='Markets')
model.a = Param(model.i, initialize={'seattle':350,'san-diego':600}, doc='Capacity of plant i in cases')
model.b = Param(model.j, initialize={'new-york':325,'chicago':300,'topeka':275}, doc='Demand at market j in cases')

dtab = {
    ('seattle',  'new-york') : 2.5,
    ('seattle',  'chicago')  : 1.7,
    ('seattle',  'topeka')   : 1.8,
    ('san-diego','new-york') : 2.5,
    ('san-diego','chicago')  : 1.8,
    ('san-diego','topeka')   : 1.4,
model.d = Param(model.i, model.j, initialize=dtab, doc='Distance in thousands of miles')

model.f = Param(initialize=90, doc='Freight in dollars per case per thousand miles')

def c_init(model, i, j):
  return model.f * model.d[i,j] / 1000
model.c = Param(model.i, model.j, initialize=c_init, doc='Transport cost in thousands of dollar per case')
model.x = Var(model.i, model.j, bounds=(0.0,None), doc='Shipment quantities in case')
def supply_rule(model, i):
  return sum(model.x[i,j] for j in model.j) <= model.a[i] = Constraint(model.i, rule=supply_rule, doc='Observe supply limit at plant i')

def demand_rule(model, j):
  return sum(model.x[i,j] for i in model.i) >= model.b[j]  
model.demand = Constraint(model.j, rule=demand_rule, doc='Satisfy demand at market j')
def objective_rule(model):
  return sum(model.c[i,j]*model.x[i,j] for i in model.i for j in model.j)
model.objective = Objective(rule=objective_rule, sense=minimize, doc='Define objective function')
def pyomo_postprocess(options=None, instance=None, results=None):
if __name__ == '__main__':
    # This emulates what the pyomo command-line tools does
    from pyomo.opt import SolverFactory
    import pyomo.environ
    opt = SolverFactory("glpk")
    results = opt.solve(model)
    #sends results to stdout
    print("\nDisplaying Solution\n" + '-'*60)

Code in R:

use_python("C:/Anaconda", required = TRUE)


a <- py_run_file("",local=T)

Output in R:

> library("reticulate")
> use_python("C:/Anaconda", required = TRUE)
> reticulate::py_config()
python:         C:/Anaconda/python.exe
libpython:      C:/Anaconda/python38.dll
pythonhome:     C:/Anaconda
version:        3.8.8 (default, Apr 13 2021, 15:08:03) [MSC v.1916 64 bit (AMD64)]
Architecture:   64bit
numpy:          C:/Anaconda/Lib/site-packages/numpy
numpy_version:  1.20.1

NOTE: Python version was forced by use_python function
> setwd("C:/Users/mea39219/Documents/R/Test")
> a <- py_run_file("",local=T)
Error in py_run_file_impl(file, local, convert) : 
  RuntimeError: Attempting to use an unavailable solver.

The SolverFactory was unable to create the solver "glpk"
and returned an UnknownSolver object.  This error is raised at the point
where the UnknownSolver object was used as if it were valid (by calling
method "solve").

The original solver was created with the following parameters:
    type: glpk
    _args: ()
    options: {}
WARNING: Failed to create solver with name 'glpk': Could not execute the
    command: 'C:\Anaconda\Library\bin\glpsol.exe --version'
        Error message: [WinError 6] Das Handle ist ung├╝ltig
> a$results
Error: object 'a' not found

Version: glpk (5.0), pyomo (5.7.2), reticulate (1.12), RStudio (1.4.1717), R (4.1.0)

I still appreciate any help.


This topic was automatically closed 21 days after the last reply. New replies are no longer allowed.

If you have a query related to it or one of the replies, start a new topic and refer back with a link.