以下问题专门用于生物技术应用,但可以说明其他领域类似问题的一般原则。这是一个 NP 难题,可能与旅行商问题有关,我很好奇可以使用哪些算法来得出解决方案。
简要生物背景:蛋白质由 20 种氨基酸组成。DNA 由 4 个碱基组成 - A、C、G、T。蛋白质的 DNA 序列决定了氨基酸的序列 - 每个连续的 3 个 DNA 碱基序列(单位称为密码子)编码一个氨基酸。单个氨基酸可以由多个密码子编码,例如缬氨酸有 4 种编码方式。
并非所有密码子都是平等的——其中一些密码子的处理速度比其他密码子快。此外,并非所有密码子 PAIRS 都是相同的 - 有些密码子对比其他密码子慢。
这意味着对于 100 个氨基酸(300 个 DNA 碱基)的特定基因,有多种编码相同氨基酸序列的方法,但具有非常不同的特性,例如处理速度。
给定具有相应速度值的密码子对表,我们想编写一个算法,可以输出所需速度的序列,例如可能的最快和最慢序列,以及介于两者之间的梯度。输入是编码基因的 DNA 序列,以及密码子对的字典及其各自的速度得分(-1 到 1)。输出是优化的 DNA 序列及其整个速度得分(可以表示为所有密码子对得分的总和)。氨基酸序列必须保持不变。
示例:如果我们有编码 3 个氨基酸的序列 AAATTTGGG,并且我们有带有分数的密码子对:
AAATT = -0.5
TTTGGG = -0.5
那么这个序列的得分可能是-1。
现在,如果我们也有配对选择,我们可以评估不同的可能性:
AAATTG = -0.7 AAATTC = -0.3
TTGGGC = +0.2 TTCGGA = -1.0
人们会发现基于此信息的最佳序列是 AAATTCGGA,因为它给出的总体值为 -1.3。
这个问题的复杂性当然在于密码子对对周围所有密码子对的影响。
完整的密码子对图表将有 61*61 个条目(因为 3 个密码子停止了基因的读取)。
====
问题
我相信这是一个 NP-hard 问题,并且与 TSP 有关。我见过一种方法使用模拟退火算法。我很好奇是否还有其他有见地的方法来考虑这个问题以及相应的算法和启发式方法来产生所需的输出。
如果是动态规划,什么方法是合适的?
此外,我们如何使用该算法来创建速度分数的梯度,而不仅仅是最大值和最小值?