我正在自学编程,我想知道如何解决这个问题。
我已经获得了一组具有给定电阻和给定值的电阻器。我可以选择给定数量的这些电阻器。我怎样才能制作一个电阻尽可能接近恢复的电路?一位程序员告诉我,可以使用遗传算法,但我不限于使用这种算法。
我想我必须使用基尔霍夫定律来制作方程的线性系统,但由于我在电力问题和线性系统的数值算法方面没有太多经验,所以我想对如何制作这些有一些指导随着系统的不断变化,方程会自动存储到计算机内存中。以及如何确保算法收敛到更好的解决方案?
问题来自芬兰讨论论坛。
电阻器可以串联或并联存在,它们的电阻加起来不同(串联增加值,并联增加倒数)。
您还可以使用串联和并联的电阻器网络。
在我看来,这听起来像是递归数据结构的经典案例,您可能可以将其表示为一棵树,类似于二叉表达式树:http ://en.wikipedia.org/wiki/Binary_expression_tree
结合一些探索性树构建(您应该研究 Prolog 执行此操作的方式),您可以找到接近您总数的电阻器的最佳组合。
这种方法中没有遗传算法,尽管您可以采用遗传方法来构建和改进树。
要应用遗传算法,您需要找到一种方法来表示、变异和组合电阻网络的“DNA”。
一种方法是:
然后:
不确定它是否真的会像这样工作,但你明白了。
毫无疑问,有一个更好的非遗传算法,但你特别要求遗传算法,所以你去。
如果你不局限于遗传算法,那么我认为你也可以借助线性规划来解决这个问题。您可以将问题编码如下,并要求求解器为您提供答案。
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