2022年第十一届数学建模国际赛小美赛B题序列的遗传过程解题全过程文档及程序

news2024/11/30 11:43:29

2022年第十一届数学建模国际赛小美赛

B题 序列的遗传过程

原题再现:

  序列同源性是指DNA、RNA或蛋白质序列之间的生物同源性,根据生命进化史中的共同祖先定义[1]。DNA、RNA或蛋白质之间的同源性通常根据它们的核苷酸或氨基酸序列相似性来推断。显著的相似性是两个序列通过共同祖先序列的进化变化而相互关联的有力证据[2]。
  考虑RNA序列的遗传过程,其中核苷酸碱基的突变是偶然发生的。为简单起见,我们假设序列突变是由于单个碱基的改变(转换或转换)、插入和删除引起的。因此,我们可以通过突变点的数量来度量两个序列之间的距离。多个碱基序列紧密结合可以形成一个家族,它们被认为是同源的。
  您的团队被要求开发一个合理的数学模型来完成以下问题。

  1、请设计一种算法,快速测量两个足够长(>103个碱基)的碱基序列之间的距离。
  2、请可靠地评估算法的复杂度和准确性,并设计合适的例子加以说明。
  3、如果一个家族中的多个碱基序列是由一个共同的祖先序列进化而来,设计一个高效的算法来确定祖先序列,并映射系谱树。

整体求解过程概述(摘要)

  随着现代基因组学的发展,越来越多的基因序列被破译出来。基于如此庞大的基因数据库,高效地实现基因序列比对具有重要意义。碱基序列间的相似性不仅可用于基因性状分析,还可用于确定基因同源性和进化过程。
  为了量化基因同源性,我们提供了基因距离和相似性的明确定义。两个碱基序列之间的基因距离可以用将序列Sm转换为另一个序列Sn的代价来表示,在转换过程中,只允许使用一系列合格的编辑手段,如插入和替换字符。相似性是指两个序列之间相等的碱基数目。在遗传距离和相似性的计算中,基因比对是一个整体。
  基因比对的关键是找出碱基序列之间如何合理匹配,以减少单个碱基变异对整体比对的影响。将基因序列视为一个由a、G、T、C四个字符组成的字符串,其两两匹配问题等价于经典的LCS(最长公共子序列)问题,即通过增加空格使两个字符串对应位置的相等字符数最大化。
  由于单个字符的编辑操作受到限制,因此可以列出每个匹配的状态转移方程,然后使用动态规划算法:Needleman-Wunsch(NW)算法找到最佳匹配。经过结构分析,该算法的时间复杂度和空间复杂度均为O(mn)。通过和现有序列匹配工具的比较,表明该算法具有高效性、准确性和适用性,匹配度为86.71%。
  根据基因距离,我们可以在一组同源基因中反转共同的祖先序列,并绘制家谱树。对于系谱树,我们参考系统发育树的生成,并应用两种算法来重建一组基因之间的进化过程。邻域连接法(NJ)和算术平均无权对群法(UPGMA)采用不同的聚类原则,可以构造两个不同的系谱树。将系统发育树与序列比对算法相结合,有效地得到了原始序列。
  为了验证系谱树的准确性,我们还设计了一个自顶向下的生成程序来模拟基因进化过程。结果表明,回溯得到的祖先序列与生成序列的起始点具有很高的相似性,证明了该算法的准确性和实用性。

模型假设:

  为了简化问题,我们做了以下假设:

  •1.有限的基因突变
  我们假设序列突变只发生在单个碱基发生改变、插入和缺失的情况下。
  •2.所研究的序列对一般都具有全局最优比对,基因序列比对大致可分为全局比对和局部比对两类。为了简化情况,
  •3.尽管正、副同系物是同系物的两个重要概念,但它们之间的区别是可以忽略的,难以量化和区分。因此,我们忽略了这两个亚类之间的差异,只关注同源基因的遗传距离。
  •4.模拟的基因变异率高于实际的基因变异率,实际的基因变异率很低,约为50%。然而,在模拟程序中,我们假设每个变异率都略高于实际值,以使比较更加显著。

问题重述:

  为了更有效地解决问题,我们将课题的要求归纳为以下具体问题,并对如何回答这些问题进行了深入分析。

  •问题1:设计一种有效的算法来测量两个碱基序列之间的遗传距离。
  计算基因距离有两个关键点:
  1、确定基因距离的定量表示
  2、设计一种高效的算法实现两个字符串序列的对齐

  •问题2:评估算法的复杂性和准确性。
  对于复杂性,需要进行时间和空间复杂性分析;在准确性方面,我们设计了几个特殊的测试样本,以验证算法逻辑的严密性。

  •问题3:设计一种有效的算法来确定多个同源碱基序列的祖先序列。
  基于上述基因距离的确定,我们可以得到一组碱基序列中任意两个样本之间的相似性。通过不断寻找相似度最大的样本,并将它们合并得到它们的直系祖先,我们可以自下而上构造一棵系谱树。
  与问题2类似,我们可以生成一系列具有已知遗传关系的序列来检验算法的准确性。

模型的建立与求解整体论文缩略图

在这里插入图片描述
在这里插入图片描述

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

部分程序代码:(代码和文档not free)

1 import sys
2 import time
3 import platform
4
5 def theta(a, b):
6 if a != b: # gap or mismatch
7 return1
8 if a == b: # match
9 return 1
10 if a == ’−’ or b == ’−’:
11 return1
12
13 def make_score_matrix(seq1, seq2):
14
15 seq1 = ’−’ + seq1
16 seq2 = ’−’ + seq2
17 score_mat = {}
18 trace_mat = {}
19
20 for i,p in enumerate(seq1):
21 score_mat[i] = {}
22 trace_mat[i] = {}
23 for j,q in enumerate(seq2):
24 if i == 0:
25 # first row, gap in seq1
26 score_mat[i][j] = −j
27 trace_mat[i][j] = 1
28 continue
29 if j == 0:
30 # first column, gap in seq2
31 score_mat[i][j] = −i
32 trace_mat[i][j] = 2
33 continue
34 ul = score_mat[i−1][j−1] + theta(p, q)
35 # from up−left, mark 0
36 l = score_mat[i][j−1] + theta(’−’, q)
37 # from left, mark 1, gap in seq1
38 u = score_mat[i−1][j] + theta(p, ’−’)
39 # from up, mark 2, gap in seq2
40 picked = max([ul,l,u])
41 score_mat[i][j] = picked
42 trace_mat[i][j] = [ul, l, u].index(picked)
43 # record which direction
44 print("SameNum:",score_mat[i][j])
45 return score_mat, trace_mat
46
47 def traceback(seq1, seq2, trace_mat):
48
49 seq1, seq2 = ’−’ + seq1, ’−’ + seq2
50 i, j = len(seq1)1, len(seq2)1
51 path_code = ’’
52 while i>0 or j > 0:
53 direction = trace_mat[i][j]
54 if direction == 0:
55 # from up−left direction
56 i = i−1
57 j = j−1
58 path_code =0+ path_code
59 elif direction == 1:
60 # from left
61 j = j−1
62 path_code =1+ path_code
63 elif direction == 2:
64 # from up
65 i = i−1
66 path_code =2+ path_code
67 return path_code
68
69 def print_m(seq1, seq2, m):
70 seq1 = ’−’ + seq1; seq2 = ’−’ + seq2
71 print()
72 print(’ ’.join([%3s’ % i for i in ’ ’+seq2]))
73 for i, p in enumerate(seq1):
74 line = [p] + [m[i][j] for j in range(len(seq2))]
75 print(’ ’.join([%3s’ % i for i in line]))
76 print()
77 return
78
79 def pretty_print_align(seq1, seq2, path_code):
80 align1 = ’’
81 middle = ’’
82 align2 = ’’
83 n=0
84 for p in path_code:
85 n=n+1
86 if p ==0:
87 align1 = align1 + seq1[0]
88 align2 = align2 + seq2[0]
89 if seq1[0] == seq2[0]:
90 middle = middle +|91 else:
92 middle = middle + ’ ’
93 seq1 = seq1[1:]
94 seq2 = seq2[1:]
95 elif p ==1:
96 align1 = align1 + ’−’
97 align2 = align2 + seq2[0]
98 middle = middle + ’ ’
99 seq2 = seq2[1:]
100 elif p ==2:
101 align1 = align1 + seq1[0]
102 align2 = align2 + ’−’
103 middle = middle + ’ ’
104 seq1 = seq1[1:]
105
106 if n==50:
107 print(’EMBOSS_001:+ align1)
108 print(’EMBOSS_002:+ align2+ ’\n’)
109 n=0
110 align1 = ’’
111 align2 = ’’
112 return
113
114 def usage():
115 print(’Usage:\n\t python nwAligner.py seq1 seq2\n’)
116 return
117
118 def main():
119 with open(’gene1.txt’,’r’,encoding=’utf−8) as f1:
120 seq1 = f1.read()
121 with open(’gene2.txt’,’r’,encoding=’utf−8) as f2:
122 seq2 = f2.read()
123 #
124 # print(’1: %s’ % seq1)
125 # print(’2: %s’ % seq2)
126
127 score_mat, trace_mat = make_score_matrix(seq1, seq2)
128 # print_m(seq1, seq2, score_mat)
129 # print_m(seq1, seq2, trace_mat)
130
131 path_code = traceback(seq1, seq2, trace_mat)
132 pretty_print_align(seq1, seq2, path_code)
133 # print(’ ’+path_code)
134
135 if __name__ == ’__main__’:
136 print(:, platform.system())
137 T1 = time.perf_counter()
138 main()
139 T2 =time.perf_counter()
140 print(:%s’ % ((T2 − T1)*1000))
 %−−−−−−−−−−−−−−− test1−−−−−−−−−−
2 % Runs example for UPGMA and NJ
3
4 clc
5 clear all
6
7 data = {’Anolis’ ’ATGACAATTACACGCAAATCCCACCCAATTTTC
8 AAAATTATTAACGACTCCTTTATTGAT’;
9 ’Basili’ ’ATGACAATCCTACGAAAATCCCACCC
10 AATCCTTAAAATAATCAACTCTTCATTCATCGAC’;
11 ’Chalar’ ’ATGACAATCATCCGAAAAACACACCC
12 AATTTTCAAAATTGTAAACGACTCATTCATTGAC’;
13 ’Gambel’ ’ATGACAATCACACGAAAATCCCACCCG
14 ATCATCAAAATCGTAAACAACTCATTTATTGAC’;
15 ’Leioce’ ’ATGACAATCACACGAAAAACTCACCCA
16 CTATTTAAAATCATCAATAACTCCTTTATTGAC’;
17 };
18 for ind = 1:length(data)
19 f(ind).Header = data{ind,1};
20 f(ind).Sequence = data{ind,2};
21 end
22
23 % UPGMA
24 distances = seqpdist(f,’Method’,’Jukes−Cantor’,’Alpha’,’DNA’);
25 UPGMAtree = seqlinkage(distances,’UPGMA’,f);
26 h = plot(UPGMAtree, ’orient’, ’top’);
27 title(’UPGMA Distance Tree of Iguanas
28 using Jukes−Cantor model’);
29 ylabel(’Evolutionary distance’)
30
31
32 % NJ
33 NJtree = seqneighjoin(distances,’equivar’,f);
34 h = plot(NJtree, ’orient’, ’top’);
35 title(’Neighbor−Joining Distance Tree of Iguanas using
36 Jukes−Cantor model’);
37 ylabel(’Evolutionary distance’)
38
39 %−−−−−−−−−−−−−−−− test2 −−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
40 % This test runs Branch and Bound and Exhaustive Search
41
42 clear all
43 clc
44 data_iguana = { ’Anolis’ ’ATGACAATTACACGCAAATCCCACCCAATTTT
45 CAAAATTATTAACGACTCCTTTATTGAT’;
46 ’Basili’ ’ATGACAATCCTACGAAAAT
47 CCCACCCAATCCTTAAAATAATCAACTCTTCATTCATCGAC’;
48 ’Chalar’ ’ATGACAATCATCCGAAAAA
49 CACACCCAATTTTCAAAATTGTAAACGACTCATTCATTGAC’;
50 ’Gambel’ ’ATGACAATCACACGAAAATCCC
51 ACCCGATCATCAAAATCGTAAACAACTCATTTATTGAC’;
52 ’Leioce’ ’ATGACAATCACACGAAAAACTCA
53 CCCACTATTTAAAATCATCAATAACTCCTTTATTGAC’;
54 ’Leioce1’ ’ATGACAATCACACGAAAAACTCAC
55 CCACTATTTAAAATCATCAATAACTCCTTTATTGAC’;
56 ’Leioce2’ ’ATGACAATCACACGAAATACT
57 CACCCACTATTTAAAATCATCAATAACTCCTTTATTGAC’;
58 ’222222’ ’ATGACAATCACACGAAATACTCA
59 CCCACTATTTAAAATCATCAATAACTCCTTTATTGAC’;
60 };
61
62 %Create a matrix with al sites with usefull information
63 [row, col] = size(data_iguana);
64 for i = 1:row
65 temp = data_iguana{i, 2};
66 matrix{i, :} = temp;
67 names = data_iguana{i, 1};
68 name_matrix{i, :} = names;
69 end
70
71 for i = 1:row
72 data(i, :) = matrix{i};
73 end
74
75 set_of_seq = non_inf_sites(data, 3);
76 %Search using improved Branch and Bound
77 tic
78 [optimal_score, optimal_model] = BrB(set_of_seq, name_matrix);
79 toc
80
81
82 %% Search using Exhaustive Search
83 tic
84 [optimal_score1, optimal_model1] = ExhaustiveSearch(set_of_seq,
85 name_matrix);
86 toc
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1290651.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AWS re:Invent 2023-亚马逊云科技全球年度技术盛会

一:会议地址 2023 re:Invent 全球大会主题演讲 - 亚马逊云科技从基础设施和人工智能/机器学习创新,到云计算领域的最新趋势与突破,倾听亚马逊云科技领导者谈论他们最关心的方面。https://webinar.amazoncloud.cn/reInvent2023/keynotes.html北京时间2023年12月1日00:30-02:…

解决mybatis-plus中,当属性为空的时候,update方法、updateById方法无法set null,直接忽略了

问题描述 当indexId set 22的时候是可以set的 我们发现sql语句也是正常的 表中数据也被更改了 但是当我们indexId为空的时候 sql语句中没有了set indexId这一属性。。 既然属性都没了,表是肯定没做修改的 问题解决 在实体类对应的字段上加注解TableField(strategy…

“城中村上建高楼”,开启一场数智化时代新修炼

“数字化也好,数智化也罢,你明明白白地告诉我,他们与信息化到底有什么区别?” “我在信息化方面已投入那么多,为什么又要投那么多钱搞数智化?” 中国软件网、海比研究院在《2024中国企业数智服务趋势洞察研…

Linux进程解析(冯诺依曼体系结构,操作系统,进程初步解析)

冯诺依曼体系结构: 我们常见的计算机,如笔记本。我们常见的计算机,服务器,大部分都遵守冯诺依曼体系。 截至目前,我们所认识的计算机,都是有一个个的硬件组件组成: 中央处理器(CPU)&am…

Stm32_串口的帧(不定长)数据接收

目录标题 前言1、串口中断接收固定帧头帧尾数据1.1、任务需求1.2、实现思路1.3、程序源码: 2、串口中断接收用定时器来判断帧结束3、串口中断接收数据空闲中断3.1、串口的空闲中断3.2、实现思路3.3、程序源码 4、串口的空闲中断DMA转运4.1、DMA简介4.2、DMA模式4.3、…

【从0配置JAVA项目相关环境2】node.js + 前端 从配置到运行

运行前端项目 写在最前面一、安装node.js二、运行前端项目1. 运行 npm install2. 运行 npm run serve报错Error: error:0308010C:digital envelope routines::unsupported方法1:设置 NODE_OPTIONS (没用)方法2:更改Node.js版本方法…

我把springboot项目从Java 8 升级 到了Java 17 的过程总结,愿为君提前踩坑!

项目从jdk8升级到jdk17,我不是为了追求java 17的新特性(准确来说也还没有去了解有什么新特性),也不是为了准确与时俱进,永远走在java行列的最前端,纯粹因为项目需要,因为我们都知道,…

日志框架梳理(Log4j,Reload4j,JUL,JCL,SLF4J,Logback,Log4j2)

原文链接 日志框架发展历程 在了解日志框架时总会列出一系列框架:Log4j,Reload4j,JUL,JCL,SLF4J,Logback,Log4j2,这么多框架让人感到混乱,该怎么选取、该怎么用。接下来…

LV.12 D23 IIC控制器与MPU6050 学习笔记

一、Exynos_4412下的IIC控制器 ​ 4412有四个IIC,如果要使用需要配置四个寄存器 I2CCON:配置一些功能 I2CSTAT:控制一些功能、显示一些状态 I2CDS:发送和接收数据 I2CADD:当4412作为从机时需要一个地址&#xff…

亚马逊云科技Serverless视频内容摘要提取方案

概述 随着GenAI的普及,视频内容摘要生成成为一个备受关注的领域。通过将视频内容转化为文本,可以探索到更广泛的应用场景,其中包括: 视频搜索与索引:将视频内容转化为文本形式,可以方便地进行搜索和索引操作…

利用阿里云 DDoS、WAF、CDN 和云防火墙为在线业务赋能

在这篇博客中,我们将详细讨论使用阿里云 CDN 和安全产品保护您的在线业务所需的步骤。 方案描述 创新技术的快速发展为世界各地的在线业务带来了新的机遇。今天的人们不仅习惯了,而且依靠互联网来开展他们的日常生活,包括购物、玩游戏、看电…

HarmonyOS4.0从零开始的开发教程04 初识ArkTS开发语言(下)

HarmonyOS(二) 初识ArkTS开发语言(下)之TypeScript入门 声明式UI基本概念 应用界面是由一个个页面组成,ArkTS是由ArkUI框架提供,用于以声明式开发范式开发界面的语言。 声明式UI构建页面的过程&#xff…

打包 抖音直播云游戏

抖音直播云游戏 oaid资源中的bcpkix-jdk15to18-1.68.jar与抖音云游戏的资源冲突。 其实资源名称是一样的,拷贝时资源名称有变化。 为解决此问题,需要规范化文件的资源名称,将.置为_ Error: Command failed: cmd /c echo off && Chc…

Kubernetes(K8s)DashBoard的使用-11

DashBoard 之前在kubernetes中完成的所有操作都是通过命令行工具kubectl完成的。其实,为了提供更丰富的用户体验,kubernetes还开发了一个基于web的用户界面(Dashboard)。用户可以使用Dashboard部署容器化的应用,还可以…

Redis key过期删除机制实现分析

文章目录 前言Redis key过期淘汰机制惰性删除机制定时扫描删除机制 前言 当我们创建Redis key时,可以通过expire命令指定key的过期时间(TTL),当超过指定的TTL时间后,key将会失效。 那么当key失效后,Redis会立刻将其删除么&#…

k8s 安装 Longhorn

Longhorn 的 helm 模板官网地址:Longhorn 加入仓库 helm repo add longhorn https://charts.longhorn.iohelm repo update开始部署 helm install longhorn longhorn/longhorn --namespace longhorn-system --create-namespace --version 1.5.3检查pod运行状态是…

STM32——电动车报警器

项目设计 // 如果检测到 PA4 被拉低(小偷偷车),并且警报模式打开 // 则将 PB7 拉低,继电器通电,喇叭一直响 // 如果检测到 PA5 被拉高(按键 A 按下),设定为开启警报模式 // 则将…

0X05

打开题目 点击完登录和注册都没有什么反应,所以先扫一下看看 在出现admin.php后就截止了,访问看看,进入后台。。 尝试一下弱口令 admin/12345 或者是demo/demo 设计中-自定义->右上角导出主题 找到一个导出的点,下载了一个1.zip压缩包…

多传感器融合SLAM在自动驾驶方向的初步探索的记录

1. VIO的不可观问题 现有的VIO都是解决的六自由度的问题, 但是对于行驶在路面上的车来说, 通常情况下不会有roll与z方向的自由度, 而且车体模型限制了不可能有纯yaw的变换. 同时由于IMU在Z轴上与roll, pitch上激励不足, 会导致IMU在初始化过程中尺度不准以及重力方向估计错误,…

配置CentOS服务器以支持PHP

CentOS是一款优秀的开源服务器操作系统,为各种网络服务提供了强大的支持。为了使CentOS服务器能够支持PHP,我们需要进行一些必要的配置。下面将介绍配置CentOS服务器以支持PHP的关键步骤。 安装PHP 首先,需要安装PHP解释器。在CentOS上&…