一种解决电路的算法

时间:2012-09-24 14:02:19

标签: c algorithm

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

我已经获得了具有给定电阻和给定值调节器的电阻器组。我可以选择一定数量的电阻。如何制作一个尽可能接近电阻的电路?程序员告诉我,可以使用遗传算法,但我不限于使用遗传算法。

我想我必须使用基尔霍夫定律制作一个线性方程组来制作方程式,但由于我对电力问题和线性系统的数值算法没有太多经验所以我想有一些指导如何能够当系统一直在变化时,我会自动将这些方程式制作成计算机内存。我怎样才能确保算法收敛到更好的解决方案?

问题来自芬兰的讨论论坛。

3 个答案:

答案 0 :(得分:3)

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

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

这听起来像是一个递归数据结构的经典案例,你可以将它表示为树,类似于二进制表达式树:http://en.wikipedia.org/wiki/Binary_expression_tree

结合一些探索树构建(你应该看看Prolog这样做的方式),你可以找到最接近总数的电阻组合。

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

答案 1 :(得分:0)

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

一种方法是:

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

    1. 从随机元组中生成一堆随机网络。
    2. 计算每个网络阻力
    3. 丢弃距离目标抵抗力最​​远的一些人口。
    4. 将它们的随机对组合起来形成新的网络。 (可能是从父A或父B中随机选择每个电阻端点,概率为50%)
    5. 随机更改一些端点(突变)。
    6. 转到2
    7. 不确定它是否真的会像这样工作,但你会得到一般的想法。

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

答案 2 :(得分: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