采用爬山法的随机字母生成器迭代后期卡壳无法100%匹配目标字符串问题
问题核心诱因
- 大小写匹配标准不一致:目标字符串
goal包含大写字母(比如开头的首字母T),但所有生成的字符串最终都会通过.lower()强制转为全小写,大小写不同的字符会被判定为不匹配,永远无法达到100%相似度。 - 相似度计算逻辑错误:
test_similarity函数接收传入的sen参数后,第一行就调用updating_sen(sen)重新生成了新字符串,最终计算的相似度根本不是传入字符串的相似度,逻辑链路完全混乱,即使生成了完全匹配的字符串也无法被正确检测到。 - 最优解更新逻辑滞后:代码设置每10000次迭代才更新一次
sen_max,如果中间某次迭代生成了100%匹配的字符串,也不会立刻触发终止条件校验,叠加前面两个bug,基本不可能触发终止逻辑。
修复方案
- 要么将
goal也统一转成全小写再做匹配,要么去掉生成字符串时的.lower()逻辑,保证大小写比对标准统一。 - 删除
test_similarity函数里的sen = updating_sen(sen)冗余代码,直接用传入的sen计算相似度。 - 可以调整最优解更新逻辑,每次迭代只要新生成的字符串相似度高于当前最高就立刻更新
sen_max,不需要等10000次迭代,大幅提升收敛效率。
内容的提问来源于stack exchange,提问作者christheliz
相关产品推荐
相关产品推荐

