注意:此代码是 Pascal Van Hentenryck 在 Coursera 上的离散优化作业的一个正在进行的解决方案。那些不想看到可能的解决方案或提示的人可能不想进一步阅读。
我对Java相当陌生,所以这可能是一个完全错误的代码。但是我在这段代码上花了一段时间没有进展。我正在单步执行 Eclipse 中的代码。
当我逐步执行下面的代码时,我正在尝试更新实例,branch[0]
但是当我更新branch[0].path
时thisNode.path
也会更新,当我更新时也会更新branch[1].path
(至少如监视窗口所示)。branch[0].path
thisNode.path
我在这里做错了什么?
void iterateOneStep(BnBNode thisNode, int next_path){
BnBNode [] branch;
branch = new BnBNode [2];
//item not picked
branch[0] = new BnBNode(items.size());
branch[0].availableCapacity = thisNode.availableCapacity;
branch[0].path = thisNode.path;
branch[0].path[next_path] = 0;
branch[0].val = thisNode.val;
//item picked
branch[1] = new BnBNode(items.size());
branch[1].availableCapacity = thisNode.availableCapacity - items.get(next_path).weight;
branch[1].path = thisNode.path;
branch[1].path[next_path] = 1;
branch[1].val = thisNode.val+items.get(next_path).value;
..............
BnBNode 类是
public class BnBNode {
int[] path;
int val;
int availableCapacity;
int potentialVal;
int optimum;
BnBNode(int numItems) {
path = new int[numItems];
numItems--;
while (numItems >= 0) {
path[numItems] = -1;
numItems--;
}
val = 0;
optimum = 0;
}
}
完整代码在https://github.com/vinaysamuel/knapsack/tree/master/src
谢谢你的时间,维奈