tuples - 有条件地将元组写回excel(仅值> 0)
问题描述
我正在尝试将元组写回excel。然而,由于 Xbiedt 的许多值为 0,因此 b、i、e、d 和 t 的组合使其输出超过 1,300,000 行。Excel 无法处理那么多行。因此,我想限制输出 t 仅具有 Xbiedt > 0 的值。下面是代码的一部分。
tuple SolXbiedt{
int b;
int i;
int e;
int d;
int t;
float x_value;
}
{SolXbiedt} solXbiedt = {<b,i,e,d,t, Xbiedt[b][i][e][d][t] > | b in PitBlocks, i in PitExits, e in DumpEntries, d in DumpBlocks, t in TimePeriods};
请期待帮助。
在 dat 文件中,我有以下行
solXbiedt to SheetWrite(sheet,"Result!H3:M4000000");
运行模型时,我得到的错误如下:IBM ILOG Concert 异常:Excel 范围未知。
我还尝试将 dat 文件更改为如下所示,将 Excel 中的限制减少到 100 万行以内。
solXbiedt to SheetWrite(sheet,"Result!H3:M1000000");
然后我得到以下信息:IBM ILOG Concert 的异常:excel:范围大小对于一组元组来说不够宽:缺少行。
解决方案
让我为你的 2 个问题举两个例子。
1)首先,您只想存储部分结果。
假设你想知道一个范围内的哪些整数值可以被 3 整除。你可以写
range r=1..10;
dvar int y[r];
dvar int z[r] in 0..2;
minimize sum(i in r) z[i];
subject to
{
forall(i in r) i==3*y[i]+z[i];
}
{int} x={i | i in r:z[i]==0};
execute
{
writeln(z);
writeln(x);
}
这使
[1 2 0 1 2 0 1 2 0 1]
{3 6 9}
z 为您提供提醒,而 x 更紧凑,因为您仅获得可除以 3 的值。我们称该操作为切片。
2)然后您需要使用取决于某个值的范围进行 SheetWrite。
.mod
int n=10;
dvar int x;
string SheetWriteConnectionString;
maximize x;
subject to {
x<=2;
}
int y[i in 1..n+1+x]=2;
execute
{
writeln("y= ",x);
SheetWriteConnectionString="A1:A"+n+1+x;
}
.dat
SheetConnection s("output.xlsx");
y to SheetWrite(s,SheetWriteConnectionString);
将实现这一目标。
推荐阅读
- docker - 从 git 克隆的构建代码在 dockerfile 中失败
- python - 如何使用 GridSearchCV.best_score_ 计算 RMSE
- python-3.x - Python 装饰器/类方法 & Pycharm
- node.js - 将 Node.js 控制台窗口置于最前面
- ios - 为什么 AVCaptureSession 以 44100 提供音频,但较新的 iPhone 以 48k 捕获?
- python - 在列表中将最相似的值一起排序
- mysql - 如果子查询在Having子句中返回null,如何处理
- html - 当文档作为 application/xhtml+xml 提供时,SVG 渲染不正确
- nuxt.js - 将 Simple Nuxt.js 应用程序部署到 now.sh 不起作用
- python - 如何使用 Tweepy 在特定日期获取推文?