我正在自学编程,我想知道如何解决这个问题。
我已经获得了具有给定电阻和给定值调节器的电阻器组。我可以选择一定数量的电阻。如何制作一个尽可能接近电阻的电路?程序员告诉我,可以使用遗传算法,但我不限于使用遗传算法。
我想我必须使用基尔霍夫定律制作一个线性方程组来制作方程式,但由于我对电力问题和线性系统的数值算法没有太多经验所以我想有一些指导如何能够当系统一直在变化时,我会自动将这些方程式制作成计算机内存。我怎样才能确保算法收敛到更好的解决方案?
问题来自芬兰的讨论论坛。
答案 0 :(得分:3)
电阻器可以串联或并联存在,并且它们的电阻加起来不同(为串联添加值,为并联添加倒数)。
您还可以使用串联和并联电阻网络。
这听起来像是一个递归数据结构的经典案例,你可以将它表示为树,类似于二进制表达式树:http://en.wikipedia.org/wiki/Binary_expression_tree
结合一些探索树构建(你应该看看Prolog这样做的方式),你可以找到最接近总数的电阻组合。
在这种方法中没有遗传算法,尽管你可以采用遗传方法来构建和改进树。
答案 1 :(得分:0)
要应用遗传算法,您需要找到一种方法来表示,变异和组合电阻网络的“DNA”。
一种方法是:
然后:
不确定它是否真的会像这样工作,但你会得到一般的想法。
毫无疑问,有一种更好的非遗传算法,但你特意要求遗传算法,所以你去了。
答案 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