2

我正在自学编程,我想知道如何解决这个问题。

我已经获得了一组具有给定电阻和给定值的电阻器。我可以选择给定数量的这些电阻器。我怎样才能制作一个电阻尽可能接近恢复的电路?一位程序员告诉我,可以使用遗传算法,但我不限于使用这种算法。

我想我必须使用基尔霍夫定律来制作方程的线性系统,但由于我在电力问题和线性系统的数值算法方面没有太多经验,所以我想对如何制作这些有一些指导随着系统的不断变化,方程会自动存储到计算机内存中。以及如何确保算法收敛到更好的解决方案?

问题来自芬兰讨论论坛。

4

3 回答 3

3

电阻器可以串联或并联存在,它们的电阻加起来不同(串联增加值,并联增加倒数)。

您还可以使用串联和并联的电阻器网络。

在我看来,这听起来像是递归数据结构的经典案例,您可能可以将其表示为一棵树,类似于二叉表达式树:http ://en.wikipedia.org/wiki/Binary_expression_tree

结合一些探索性树构建(您应该研究 Prolog 执行此操作的方式),您可以找到接近您总数的电阻器的最佳组合。

这种方法中没有遗传算法,尽管您可以采用遗传方法来构建和改进树。

于 2012-09-24T14:05:38.477 回答
0

要应用遗传算法,您需要找到一种方法来表示、变异和组合电阻网络的“DNA”。

一种方法是:

  1. 在您的电阻器组(代表电线)中添加一些 0 欧姆电阻器。
  2. 将电阻从 1 编号到 N
  3. 对于一些 M,想象一组 M 个结点,包括源 (1) 和汇 (M)。
  4. 您可以将每个电阻器的两个端点连接到哪些结点定义为网络的唯一标识符。这只是 1..M 范围内的整数对的 N 元组。这个元组可以是“DNA”。

然后:

  1. 从随机元组生成一堆随机网络。
  2. 计算每个网络的电阻
  3. 丢弃离目标抵抗最远的一些人口。
  4. 组合它们的随机对以形成新的网络。(也许通过以 50% 的概率从父 A 或父 B 中随机选择每个电阻端点)
  5. 随机更改一些端点(突变)。
  6. 转到 2

不确定它是否真的会像这样工作,但你明白了。

毫无疑问,有一个更好的非遗传算法,但你特别要求遗传算法,所以你去。

于 2012-09-24T14:33:07.060 回答
0

如果你不局限于遗传算法,那么我认为你也可以借助线性规划来解决这个问题。您可以将问题编码如下,并要求求解器为您提供答案。

Required Resistance Of Circuit = x ohms

// We want to have total 33 resistors.
selected_in_series_1 + selected_in_series_2 +... + selected_in_series_211 + selected_in_parallel_1 + selected_in_parallel_2 + ... + selected_in_parallel_211 = 33

// Resistor in Series
(selected_in_series_1 * Resistor_1) + (selected_in_series_2 * Resistor_2) + ..(selected_in_series_211 * Resistor_211) = total_resistence_in series

// Similarly write formula for parallel
(selected_in_parallel_1 * 1/Resistor_1) + (selected_in_parallel_2 * 1/Resistor_2) + ..(selected_in_parallel_211 * 1/Resistor_211) = 1/total_resistence_in parallel

total_resistence_in series + total_resistence_in parallel = Required Resistance Of Circuit
于 2012-09-24T15:33:56.253 回答