找到一个贪心算法来平衡成功率和成本

时间:2018-02-16 05:04:14

标签: algorithm greedy

enter image description here

嗨!我正试图解决这样的问题。任务包含多个备用节点。它们将并行执行。每个节点都有成功率和成本。通过在乘法设备上执行此任务可以提高成功率(至少一个设备获得结果的成功率将增加1-(1-S)^ N)。

该任务的目标是从任何这些节点获取结果。成功执行一个节点后,其他节点将停止。问题是,如何定义一个算法,该算法满足至少一个节点成功且成本最低的总体成功率阈值。

我认为这应该是一个包含3个变量的贪心算法:设备数量,成功率和成本。我不知道如何比较成功率和成本的比率。有人可以帮我吗?我们可以假设总体成功率的门槛是90%。

1 个答案:

答案 0 :(得分:0)

您要使用类似于小背包的算法,但要有所不同:

首先,将成功率高于边界的节点的任何成功率临时设置为边界的值。 例如,如果边界为90%,节点C为(100%,$ 5),则节点C变为(90%成功率,$ 5)。

这是因为您正在寻找满足边界要求的最低成本。因此,例如,如果您的边界是50%,则您仍然希望选择具有(50%成功率,$ 5)的节点而不是具有(100%成功率,$ 6)的节点。因此,您的节点的成功率为100%可能也是50%的成功率

然后,按成功率/成本升序对节点进行排序。

算法的每个步骤都是将成功率/成本最低的节点添加到您的节点解决方案列表中,直到节点的总成功率达到边界为止。但是,增加的步骤是,如果添加的节点创建的总成功率大于边界,则必须从最大成功率/最低成本到最低成本遍历节点的解决方案列表,然后查看是否仍会删除该节点保持达到百分比边界。您将继续删除可能的节点,直到无法删除任何节点并且仍然满足边界为止。

例如:如果您的列表中有按顺序添加的节点:

(20%,$ 2),(30%,$ 1),(40%,.5 $),边界为70%,

目前总百分比为90%,大于70%。 由于仅添加了节点(40%,.5 $),因此您仅查看节点(30%,$ 1)便发现它无法删除,因为这样边界将小于边界的60%。 然后,您查看可以删除的下一个节点(20%,$ 2),因为剩余的总计百分比将是70%,它满足所需的边界。您将继续前进,但是在此示例中,新更改的(30%,$ 1),(40%,.5 $)将是有效的解决方案。