- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在研究一个必须用分支定界算法解决的问题。假设我们有 n 个加油站,距起点的距离值不同。站有不同的利润。我们希望利润最大化,但每个站必须远离至少 K 长度。我用动态算法解决了这个问题,但找不到分支定界算法的解决方案。实际上,我需要一个好的目标函数来确定界限。我尝试了很多功能,但都失败了。谢谢。
例子:n=5k=10
距离值l1=5, l2=15, l3=23, l4=30, l5=38
利润:p1=7, p2=3, p3=10, p4=12, p5=6
最佳答案
这是一个相当典型的打包问题。我们可以像这样将它表述为一个整数程序。如果我们打开 i
站,则 x_i
为 1
,否则为 0
。那么目标就是
n
maximize sum profit_i x_i.
i=1
约束条件是我们不能在 k
距离内开设两个站点。我们可以在站点上滑动一个长度为 k
的窗口,为每个最大子集发出一个约束。对于距离值 l_1 = 5、l_2 = 15、l_3 = 23、l_4 = 30、l_5 = 38
和 k = 16
,我们有约束
x_1 + x_2 <= 1 (y_1) { 5, 15}
x_2 + x_3 + x_4 <= 1 (y_2) {15, 23, 30}
x_3 + x_4 + x_5 <= 1 (y_3) {23, 30, 38}.
最后各站开不开。
for all i, x_i in {0, 1}
我们遇到所有这些麻烦的原因如下。首先,我们可以通过将 x_i in {0, 1}
替换为 x_i >= 0
来放宽约束。现在我们有一个线性程序。我们知道
value of linear program >= value of integer program,
因为整数规划的每个解都是线性规划的有效解。线性规划的美妙之处在于它们有一个对偶规划,在某些技术约束下,通过 LP 对偶,满足
value of dual program = value of linear program >= value of integer program.
这很重要,因为这里的对偶规划是一个最小化,所以任何旧的解决方案都会给我们一个原始整数规划的界限(即我们真正关心的问题)。
这是从线性程序中机械导出的。下面我将直观地解释一下。通用版本:
m
minimize sum y_j
j=1
for all i, sum over windows j containing station i of y_j >= profit_i
for all j, y_j >= 0.
具体版本(上述具体 LP 的双重版本):
minimize y_1 + y_2 + y_3
y_1 >= profit_1 (x_1)
y_1 + y_2 >= profit_2 (x_2)
y_2 + y_3 >= profit_3 (x_3)
y_2 + y_3 >= profit_4 (x_4)
y_3 >= profit_5 (x_5).
y_1, y_2, y_3 >= 0.
直觉上,我们正在计算对每个窗口征税多少,这样 build 任何车站都是一个收支平衡的提议。我们征收的税越少,车站的值(value)就越低。
对偶程序可以通过 LP 求解(实际上可能是整数最优;这是变相的最短路径问题)。这是一个更容易实现的近似算法。
如果每个 y_i
出现在未满足的对偶约束的左侧,则它是事件的。当一些 y_i
处于事件状态时,我们以相同的速率连续增加所有事件的 y_i
。在实践中,我们首先找出满足哪个约束,然后直接将时间步长到该点。
让我们假设约束和以前一样
y_1 >= profit_1 = 1
y_1 + y_2 >= profit_2 = 2
y_2 + y_3 >= profit_3 = 4
y_2 + y_3 >= profit_4 = 5
y_3 >= profit_5 = 3.
最初所有变量都为 0
并且处于事件状态。当它们达到 1
时,profit_1
和 profit_2
约束得到满足。因此 y_1
被停用,因为它不参与任何其他约束。我们继续将y_2
和y_3
增加到2
,然后满足profit_3
约束。这两个变量都参与了 profit_4
约束,因此它们保持事件状态。当我们增加到 2.5
时,profit_4
约束得到满足,y_2
不再有效。我们继续,将 y_3
增加到 3
以获得 y_1 = 1
和 y_2 = 2.5
和 的最终解决方案>y_3 = 3
,值 6.5
。最优值是(例如)y_1 = 1
和 y_2 = 2
和 y_3 = 3
,对于值 6
。
关于algorithm - 最长路径实现的分支定界策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30019445/
我在一本书(Interview Question)中读到这个问题,想在这里详细讨论这个问题。请点亮它。 问题如下:- 隐私和匿名化 马萨诸塞州集团保险委员会早在 1990 年代中期就有一个绝妙的主意
我最近接受了一次面试,面试官给了我一些伪代码并提出了相关问题。不幸的是,由于准备不足,我无法回答他的问题。由于时间关系,我无法向他请教该问题的解决方案。如果有人可以指导我并帮助我理解问题,以便我可以改
这是我的代码 public int getDist(Node root, int value) { if (root == null && value !=0) return
就效率而言,Strassen 算法应该停止递归并应用乘法的最佳交叉点是多少? 我知道这与具体的实现和硬件密切相关,但对于一般情况应该有某种指南或某人的一些实验结果。 在网上搜索了一下,问了一些他们认为
我想学习一些关于分布式算法的知识,所以我正在寻找任何书籍推荐。我对理论书籍更感兴趣,因为实现只是个人喜好问题(我可能会使用 erlang(或 c#))。但另一方面,我不想对算法进行原始的数学分析。只是
我想知道你们中有多少人实现了计算机科学的“ classical algorithms ”,例如 Dijkstra's algorithm或现实世界中的数据结构(例如二叉搜索树),而不是学术项目? 当有
我正在解决旧编程竞赛中的一些示例问题。在这个问题中,我们得到了我们有多少调酒师以及他们知道哪些食谱的信息。制作每杯鸡尾酒需要 1 分钟,我们需要使用所有调酒师计算是否可以在 5 分钟内完成订单。 解决
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 8 年前。 Improve
我开始学习 Nodejs,但我被困在中间的某个地方。我从 npm 安装了一个新库,它是 express -jwt ,它在运行后显示某种错误。附上代码和错误日志,请帮助我! const jwt = re
我有一个证书,其中签名算法显示“sha256rsa”,但指纹算法显示“sha1”。我的证书 SHA1/SHA2 的标识是什么? 谢谢! 最佳答案 TL;TR:签名和指纹是完全不同的东西。对于证书的强度
我目前在我的大学学习数据结构类(class),并且在之前的类(class)中做过一些算法分析,但这是我在之前的类(class)中遇到的最困难的部分。我们现在将在我的数据结构类(class)中学习算法分
有一个由 N 个 1x1 方格组成的区域,并且该区域的所有部分都是相连的(没有任何方格无法到达的方格)。 下面是一些面积的例子。 我想在这个区域中选择一些方块,并且两个相邻的方块不能一起选择(对角接触
我有一些多边形形状的点列表,我想将其包含在我页面上的 Google map 中。 我已经从原始数据中删除了尽可能多的不必要的多边形,现在我剩下大约 12 个,但它们非常详细以至于导致了问题。现在我的文
我目前正在实现 Marching Squares用于计算等高线曲线,我对此处提到的位移位的使用有疑问 Compose the 4 bits at the corners of the cell to
我正在尝试针对给定算法的约束满足问题实现此递归回溯函数: function BACKTRACKING-SEARCH(csp) returns solution/failure return R
是否有包含反函数的库? 作为项目的一部分,我目前正在研究测向算法。我正在使用巴特利特相关性。在 Bartlett 相关性中,我需要将已经是 3 次矩阵乘法(包括 Hermitian 转置)的分子除以作
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 8 年前。 Improve
问题的链接是UVA - 1394 : And There Was One . 朴素的算法是扫描整个数组并在每次迭代中标记第 k 个元素并在最后停止:这需要 O(n^2) 时间。 我搜索了一种替代算法并
COM 中创建 GUID 的函数 (CoCreateGUID) 使用“分散唯一性算法”,但我的问题是,它是什么? 谁能解释一下? 最佳答案 一种生成 ID 的方法,该 ID 具有一定的唯一性保证,而不
在做一个项目时我遇到了这个问题,我将在这个问题的实际领域之外重新措辞(我想我可以谈论烟花的口径和形状,但这会使理解更加复杂).我正在寻找一种(可能是近似的)算法来解决它。 我有 n 个不同大小的容器,
我是一名优秀的程序员,十分优秀!