mosel - 我将 d 定义为二进制变量,但解是 xpress mosel 中 0 和 1 之间的连续变量
问题描述
我试图为整数编程建模,但即使我将 d 和 v 声明为二进制变量,它也给了我 0 到 1 之间的连续变量。有人可以看看吗?提前致谢
declarations
!Ranges
row = 1..7
column = 1..7
colors = 1..7
n_r = 0..8
n_c = 0..8
!Variables
d: array(n_r,n_c,colors) of mpvar
v: array(colors) of mpvar
votes :array(1..7, 1..7) of integer
obj:linctr
end-declarations
forall(i in 1..7, j in 1..7, k in 1..7) d(i,j,k) is_binary
forall(k in 1..7) v(k) is_binary
initialisations from "votes.dat"
votes
end-initialisations
forall(j in 0..8, k in 1..7) do
d(0,j,k) = 0
d(8,j,k) = 0
end-do
forall( i in 0..8, k in 1..7) do
d(i,0,k) = 0
d(i,8,k) = 0
end-do
forall(i in 1..7, j in 1..7, k in 1..7) do
d(i,j,k) <= d(i+1,j,k) + d(i-1,j,k) + d(i,j+1,k) + d(i,j-1,k)
end-do
forall(i in 1..6, j in 1..7, k in 1..7) do
d(i,j,k) +d(i+1,j,k)-1 <= d(i-1,j,k) +d(i,j+1,k) +d(i+1,j+1,k)+d(i+2,j,k) + d(i+1,j-1,k) + d(i,j-1,k)
end-do
forall(i in 1..7, j in 1..6, k in 1..7) do
d(i,j,k) + d(i,j+1,k)-1 <= d(i,j+2,k) + d(i+1,j+1,k) + d(i+1,j,k) +d(i,j-1,k) + d(i-1,j,k) + d(i-1, j+1,k)
end-do
forall(i in 1..6, j in 2..6, k in 1..7) do
d(i,j,k) + d(i,j+1,k)+ d(i,j-1,k) -2 <= d(i-1,j,k) - d(i+1,j,k) - d(i+1,j+1,k) - d(i-1,j+1,k) -d(i+2,j+2,k) - d(i-1,j-1,k) - d(i+1, j-1,k) - d(i, j-2, k)
end-do
forall(i in 2..6, j in 1..7, k in 1..7) do
d(i,j,k) + d(i-1, j, k) + d(i+1,j,k)-2 <= d(i, j+1,k) - d(i,j-1,k) - d(i+1,j+1,k) - d( i+1, j-1,k) - d(i+2,j,k) - d(i-1,j+1,k) -d(i-1,j-1,k) - d(i-2, j,k)
end-do
forall(k in 1..7) do
sum(i in 1..7, j in 1..7) d(i,j,k) * votes(i,j) - 4*v(k) <= 3
end-do
forall(k in 1..7) do
sum(i in 1..7, j in 1..7) d(i,j,k) * votes(i,j) - 4 * v(k) >= 0
end-do
forall(k in 1..7) sum(i in 1..7, j in 1..7) d(i,j,k) = 7
forall(i in 1..7, j in 1..7) sum (k in 1..7) d(i,j,k) = 1
obj:= sum(k in 1..7) v(k)
maximize(obj)
write(getsol(obj))
writeln(" ")
forall(k in 1..7)do
forall(j in 1..7)do
forall(i in 1..7)do
write(getsol(d(i,j,k)), " ")
end-do
end-do
writeln(" ")
end-do
end-model
解决方案
您的问题可能是不可行的,在这种情况下,您会得到不可行的值。尝试添加此代码
case getprobstat of
XPRS_OPT: status:="Optimum found"
XPRS_UNF: status:="Unfinished"
XPRS_INF: status:="Infeasible"
XPRS_UNB: status:="Unbounded"
XPRS_OTH: status:="Failed"
else status:="???"
end-case
writeln("Problem status: ", status)
除非这表明可行的解决方案可用,否则 from 的值getsol()
可能不是二进制的。
推荐阅读
- javascript - 注册电子邮件确认 onclick 按钮停止工作而无需更改代码?!帮助表示赞赏
- typescript - 是否可以根据泛型类型重载整个接口?
- javascript - TypeScript 中的 JavaScript 调用回调函数
- typescript - Svelte 和 TypeScript:如何添加或扩展基本/默认组件,例如或者
- r - 设置不同于全局环境的脚本环境
- java - 在 Java 中使用 floorentry 时遇到问题
- excel - SaveAs 错误(在创建目录之前保存文件)
- java - Spring Boot 应用程序中的嵌入式 Untertow 最终变得无响应
- amazon-ecs - 将 ECS 日志转发到 splunk 和 cloudwatch
- r - 如何在 R 中生成一个可显示的表,对不同列中字符串和数字之间的匹配进行计数/求和