分子量分解问题
2015-05-30张晓飞
张晓飞
摘 要:生命蛋白质是由若干种氨基酸经过不同的方式组合而成的,本题中将分子量为x的生命蛋白质分解为18种已知分子量a[i]氨基酸的和的形式,需要求解组合成蛋白质的氨基酸的所有可能形式。针对实验室没有计算机的情况下要求解对任意一个分子量x具体给出由哪些a[i](i=1,.......,n)氨基酸组成,由于计算量过大,我们通过假设实验室的化学等设备可以计算出蛋白质的分子式来增加计算中的约束条件,从而减小了计算量,再通过线性方程组求解计算出没有计算机的情况下的氨基酸组成个数。针对实验室有计算机的情况下,我们通过题目所给的条件列出等式,由于考虑到直接用所列出的等式计算一旦所给的数增大时,即使使用计算机也需要一定的时间才能得到答案,我们通过查閱的资料得到每个蛋白质N含量的限制为15%~17%,从而列出了约束条件,首先利用lingo求解,发现有一个最优解,不符合我们需要的解,再利用c语言编程出相应的程序,用软件算出解的个数及所有满足条件的组合。例如,得出x=1000时解的数量为20650。
关键词:约束变量 循环嵌套 分子式
中图分类号:O632 文献标识码:A 文章编号:1672-3791(2015)03(c)-0217-02
1 问题重述
生命蛋白质是由若干种氨基酸经不同的方式组合而成。在实验中,为了分析某个生命蛋白质的分子组成,通常用质谱实验测定其分子量x(正整数),然后将分子量x分解为n个已知分子量a[i](i=1,.......,n)氨基酸的和的形式。某实验室所研究的问题中:
n=18,x1000
a[i](i=1,.......,18)分别为57,71,87,97,99,101,103,113,114,115,128,129,131,137,147,156,163,186
要求针对该实验室拥有或不拥有计算机的情况,对如何分解分子量x作出解答,即针对任意一个分子量x具体给出由哪些a[i](i=1,.......,n)氨基酸组成。
2 问题分析
该题中要求针对该实验室拥有或不拥有计算机的情况,对如何分解分子量x作出解答,题目中所给的已知分子量a[i]为氨基酸的和的形式,通过查阅资料得出所给的氨基酸的和的形式已经减去了一个水分子的相对质量,在求解的过程中可以忽略脱水的问题,所以可以列出公式:
单只有这个公式不论是在有计算机还是没有计算机的情况下求解量过大,于是考虑需找约束条件来解决问题。
3 模型假设
1、每个蛋白质有N含量的限制为15%~17%[1]。
2、蛋白质组成时,不考虑氨基酸的排列顺序,只考虑氨基酸的数量和种类。
3、不考虑一种氨基酸的出现会影响其他氨基酸的存在。
4、不考虑氨基酸组合成蛋白质时的脱水问题。
4 符号系统
a(i):第i个氨基酸的分子质量
n(i):第i个氨基酸的数目
x:蛋白质分子的总分子质量
c(ij):第i种氨基酸中j元素的个数
d(j):蛋白质中含j元素个数
5 模型建立
根据题目所给的条件可知这是一个求解整数系n元一次方程的问题。
列出方程和基本约束条件:
n(i)>=0且n(i)(i=1,2,3,......18)
问题一:在拥有计算机的情况下:
1.分析题目得,在所有的排列组合中,肯定有一组最优解,即max(sum)最接近x,这就是我们要求的组合,考虑到这里,我们有lingo编程实现最优解,变量一共有18个即;a1~a18,分别赋值为:57,71,87,97,99, 101,103,113,114,115,128,129,131,137,147,156,163,186。它们都是非负整数,具体程序见附录。Lingo解得的解只是很多解中的一组,这就显示lingo程序的不足。这里列举了其中的几组解见表1。
2.由于lingo软件不是最优的,我们在这里用c语言编程应用穷举法来解出所有符合要求的解的组合。我们用18个for循环把符合要求的解全部都列举出来,并且计算有多少个组合。为了使我们的编程有亮点,我们简化了c语言的程序,使运算更快捷,并且我们的程序可以附加条件,这就适合推广应用,适合生物学家知道分子量的前提下应用我们的编程快速的筛选出合理的组合,软件小巧,以推广,可移植性强。
对于每个a(i)循环我们都限制循环量即循环次数m<=x/a(i),我们每次循环都检查“sum>x?”。利用continue语句可以实现这个功能,这样可以最大限度的避免不必要的循环。
利用c语言解出的几组蛋白质氨基酸组合个数见图1。
问题二:在没有计算机的前提下:
在没有任何其它的信息补充和约束条件的情况下,最一般的模型可表示为
x(i)>=0且x(i)(i=1,2,3,......18)
这样的模型在有计算机的情况下当X的值达到一定的数目以后就需要很长的时间才能求解出来,所以对于没有计算机的情况下,用这种模型进行求解的不切实际的,所以我们便考虑从已有的条件下去寻找约束条件,从本质上减小计算的数量。
实验室中虽然没有计算机,但是根据有关质谱实验在有机化学中的应用可知:质谱法可以得到有关分子结构的信息以及化合物的准确分子量和分子式[2]。那么我们就假设:实验室可以对完全分解后的氨基酸混合液做定性的分析,并通过质谱仪检测从而得到蛋白质的分子式。
又由于氨基酸是由C,N,O.H.S五种元素组成的,我们由18种氨基酸的分子量推测出其分子式如表2所示:
根据给出的氨基酸的分子式,用j=1,2,3,4,5分别表示C,N,H,O,S五种元素,i对应第i号氨基酸(参照表2),可建立模型:
( j=1,2,3,4,5)
x(i)>=0且x(i)(i=1,2,3,......18)
再利用线性方程组求出通解,然后找出其满足条件的整数解。
考虑到计算量依然较大,可以对模型进一步优化:
由于S元素在蛋白质中所占得比例很小[3],而题目给出的18种氨基酸中只有17号半胱氨酸和18号组氨酸含有硫元素,所以可以分两种情况计算。
1.蛋白质中含有S时,直接利用上述模型。
2.蛋白质中不含S时,取i=1,2,3......16, j=1,2,3,4.此时考虑的氨基酸种类减少,运算量减少。
6 模型分析
Lingo编程方便,解也是最优解,但是只能解出一个解,不符合实际应用要求,所以这个模型需要改善。C语言编程应用穷举法,能比较全面地把所有组合求出来,供需要人员选用,C语言编程可移植性高,应用广,运算速度快,限制条件添加方便。第二个模型在有计算机的前提下可以推广应用。
7 模型推广
C语言提供了一个排列组合解决n元一次方程的模板,适合大部分穷举法解决组合问题的解法,由于我们的c语言模板编程应用了很多简化运算的语句,所以在一般计算机中就可以进行规模较大的分子质量组合解答,并且可以方便地添加约束条件来筛选输出。
8 结语
通过我们的建立的模型求解蛋白质分子的组合,可以得到x值所对应的解对的个数以及组合的情况,并且可以同过增加if语句对结果进行筛选,符合题目要求,并且对实际应用有很大帮助。
参考文献
[1] 百度百科,组成及特点栏目,http://baike.baidu.com/view/15472.htm.
[2] 邢其毅,裴伟伟.基础有机化学[M].北京:高等教育出版社,1993年.
[3] CD古奇,DG帕斯托.有机化学基础[M].北京:高等教育出版社,1986.