【发布时间】:2016-08-03 09:19:25
【问题描述】:
我在 Julia 中使用 GLPK,并使用 spencerlyon 编写的 methods
sendto(2, lp = lp) #lp is type GLPK.Prob
但是,我似乎无法在工作人员之间发送类型 GLPK.Prob。每当我尝试发送类型 GLPK.Prob 时,它都会被“发送”并调用
remotecall_fetch(2, whos)
确认 GLPK.Prob 已发送
当我尝试通过调用解决它时出现问题
simplex(lp)
错误
GLPK.GLPKError("invalid GLPK.Prob")
出现。我知道 GLPK.Prob 最初不是无效的 GLPK.Prob,如果我决定在另一个工人 fx 工人 2 上显式构造 GLPK.Prob 类型,调用 simplex 运行得很好
这是一个问题,因为 GLPK.Prob 是从我的自定义类型生成的,有点偏重
tl;dr 是否有一些类型无法在工作人员之间正确发送?
更新
我现在看到了呼唤
remotecall_fetch(2, simplex, lp)
将返回上述 GLPK 错误
此外,我刚刚注意到 GLPK 模块有一个名为
的方法GLPK.copy_prob(GLPK.Prob, GLPK.Prob, Int)
但在复制 GLPK.Prob 时 deepcopy(当然不是复制)不起作用
示例
function create_lp()
lp = GLPK.Prob()
GLPK.set_prob_name(lp, "sample")
GLPK.term_out(GLPK.OFF)
GLPK.set_obj_dir(lp, GLPK.MAX)
GLPK.add_rows(lp, 3)
GLPK.set_row_bnds(lp,1,GLPK.UP,0,100)
GLPK.set_row_bnds(lp,2,GLPK.UP,0,600)
GLPK.set_row_bnds(lp,3,GLPK.UP,0,300)
GLPK.add_cols(lp, 3)
GLPK.set_col_bnds(lp,1,GLPK.LO,0,0)
GLPK.set_obj_coef(lp,1,10)
GLPK.set_col_bnds(lp,2,GLPK.LO,0,0)
GLPK.set_obj_coef(lp,2,6)
GLPK.set_col_bnds(lp,3,GLPK.LO,0,0)
GLPK.set_obj_coef(lp,3,4)
s = spzeros(3,3)
s[1,1] = 1
s[1,2] = 1
s[1,3] = 1
s[2,1] = 10
s[3,1] = 2
s[2,2] = 4
s[3,2] = 2
s[2,3] = 5
s[3,3] = 6
GLPK.load_matrix(lp, s)
return lp
end
这将返回一个 lp::GLPK.Prob() ,运行时将返回 733.33
simplex(lp)
result = get_obj_val(lp)#returns 733.33
但是,做
addprocs(1)
remotecall_fetch(2, simplex, lp)
会导致上面的错误
【问题讨论】:
-
你能发布一个可重现的例子吗?
标签: parallel-processing julia glpk