从优化系统的设计方法论之中,能够得到什么启发?
简介
笔者认为,通证设计总有一天会被当作一门工程学科来对待,本文是一些初始笔记。
首先,我会描述优化设计领域中一种结构化的方法论。然后,会说明如何在激励设计中应用类似的方法论。
接下来,我会描述在电路设计中用到的一些重要工具:模拟器和CAD 工具;以及如何将它们用在电路设计之中。
最后,我会列举一些设计模式。
优化设计方法论
在优化器设计领域,虽然社区之间的沟通较少提及,但是算法的实践者所做的事情非常相似。想要做出来恰好够用的优化器系统,他们遵循了如下的步骤。有些人自己并不觉察,但是行家却是系统性地采用这些步骤:
1 界定问题
他们假设算法“能够生效”,他们关注的是根据目标和约束(目标)和设计空间(优化器可以探测到何处,这实际上就是约束条件)来界定问题。
2 尝试现有的求解器(solver)
他们针对这些目标运行算法,解答问题。优化算法的代码通常被成为“求解器”. 如果不成功,实践者们会换用其他不同的问题制定方式,不同的求解器以及不同的求解器参数来尝试。
3 寻找新的求解器?
如果尝试了各种各样的方式后,第二步都不生效,那么人们会考虑创建自己的求解器,即设计新的优化算法。
我们来看看更多的细节。
优化方法论的细节描述
第一步: 界定优化问题
几乎所有的优化相关的论文,都列出了目标和约束条件。拿我自己的工作为例,[这篇论文](http://trent.st/content/20101 - tevc -mojito-ea.pdf)中的公式(1)是在一个根据语法定义的搜索空间中实现多目标约束优化的公式。这里有一个片段:
另一个例子,这篇论文(第2节)中的方程(1)和(2)提出了一个在n维连续值变量空间的随机单目标优化(“最大化产出”)问题。
用目标,约束和设计空间来界定问题并不容易。实际上,这么些年来,它仍然是一个非常需要的创造力的艺术(就是说,这很有趣!)。有很多种方式来界定问题; 这些方式并不相同。幸好,你可以在实践中做得越来越好。我见到在EA社区和电路CAD社区中有些朋友在界定问题的艺术上具备高超的技巧。
例如,一个公式可能很容易解决,另一个可能是NP-困难问题,你不确定能够完成任何问题。在凸优化领域中,有一个人们所使用的大技巧: 他们将被认为是NP-困难的问题,然后应用技术将其转换为凸问题(例如,放置位置正确的日志操作符)。然后,这些凸问题可以来使用转化求解器比如几何规划,在多项式时间内解决。我在这方面也取得了成功; 对于上面的截图中所总结的问题,我给树归纳问题(模拟电路合成)添加了语法约束,得到了1000倍的运行时改进,优化器的结果也有所改进。
或者,如果你使用进化算法(EA), 想设计从设计点→适应度的映射, 这样设计的小变化,通常导致行为的微小变化, 以及最终适应度的变化。(我称之为平滑操作符).
第二步:尝试现有的求解器
理想情况下,你可以用上述的方式界定问题,以便应用现成的求解器或算法。之后就可以运行求解器,看看结果如何。
如果生效的话,那你的工作就完成了,可以停下来了!
至少有两种情况,可能导致上面的办法不奏效。
首先,如果求解器收敛性不够,那么你可以尝试不同的问题界定方式,尝试不同的求解器或者参数。
其次,求解器也可能过度收敛,导致得到的设计并不靠谱。要解决这个问题,可以对问题加以修改: 添加新的约束条件或提高模型/模拟器的准确性。如果你发现自己正处于不停添加约束的冗长迭代之中(“AI whack-a-mole”),那么可能你要重新考虑下用更广泛的方式来解决问题。
第三步: 新的求解器? 如果需要的话,自己设计一个新的优化算法
有时你会发现,现有的解决方案都不够好。也许你需要更好的度量,或者需要处理一些难以建模的约束,或者其它问题。这时候就需要你去进行算法设计的研究了。算法设计时,你通常会利用现有的构建块,加上自己的想法。设计新的算法需要花费大量的时间,但是如果做好了的话,你可能能够解决问题,得到数量级的改进,例如FFX。
(这会很有趣,我可能忘记说了.)
通证设计方法论
出块奖励是区块链网络目标函数的表现形式之一 -- 你想要最小化或最大化的对象。这可以得到泛化。通证设计与优化算法设计有些类似。因此:
我们可以用优化设计的方式来进行通证设计。
我们可以取来优化设计领域的步骤,转用在设计通证生态系统之中。
1. 界定问题
写下通证生态系统的目标和约束。
这意味着要问如下问题:
- 谁是我的潜在利益相关者?
- 他们每个人想要什么?
- 攻击向量是什么?
然后将它们转换成可以测量的目标和约束条件。
2. 尝试现有的模式
确定是否存在一个现有的解决方案(solver),即可以解决你问题的通证网络设计模式。例如,如果您正在寻找“优秀”参与者/资产/等等的列表,那么[通证管理清单(token curated registry)](https://medium.com/@ilovebagels/ token-curates-1-01a232f8dac7) (TCR)的设计模式可以吗?
稍后我将对此进行详细说明。
如果这不起作用,你可以尝试界定问题的不同方式、不同的解决方案或求解器的不同参数。
例如,如果它收敛于你不想要的行为,你可以添加一个约束条件来阻止该行为。
3. 新的模式?
如果需要的话,创建你自己的解决方案,即,自行设计通证网络。当然,在设计时,你可能会用到已有的构建模块,比如TCRs或者仲裁模块。