2020五一建模:C题 饲料混合加工问题 题解

  • 问题一题解
    • 分析
    • 求解
  • 问题二题解
    • 分析
    • 求解
  • 问题三题解
    • 分析
    • 求解
  • 问题四题解
    • 分析
    • 求解
  • 问题五题解
    • 分析
    • 求解
  • 附录代码
    • 工具函数
    • Q1
    • Q2
    • Q3
    • Q4

我觉得蒸米的时候米与水的配比是一个NP-hard问题

问题一题解

分析

问题1研究16个加工原料两两之间的亲缘值,并进行统计分析。根据题目所给的16个加工原料的基因序列信息,进行两两比对,若两个加工原料有N个相同位点的基因序列标记相同,就认为这两个加工原料的亲缘值为N。用python进行编程编写计算亲缘度的函数,遍历所有原料两两之间的组合,统计他们的亲缘值并记录在一个16*16的方阵中,并做统计学分析。

求解

首先根据题目所给亲缘值定义:两个加工原料如果有 N 个相同位点的基 因序列标记相同,就认为这两个加工原料的亲缘值为 N(如果 N 大于 0,则说明 这两种加工原料之间具有亲缘关系)。由于两两原料之间没有先后顺序关系,故利用排列组合知识对每一种原料组合的亲缘度进行计算求解。

根据题目所给表 1 各加工原料的品种代码、总重量、效能率和基因序列标记,使用python编写程序计算得到一个16*16的方阵,对应任意两个加工原料间的亲缘度,并对数据进行处理。处理结果如图1,数据分析结果如图2。

根据图3、4可知,16种加工原料两两组合方式有120种,其中具有亲缘关系的加工原料两两组合种类有40种,亲缘值最小为1,最大为6,均值为3.0500。

问题二题解

分析

问题 2 要求将 16 种加工原料全部放入 9 个加工窖中进行加工,建立数学模型,求出能得出饲料质量最高的混合并给出每个加工包的亲缘度。仅从亲缘度角度考虑混合加工饲料的质量,亲缘度越高,饲料质量就越高,则问题二最终目标转化为求取亲缘度最优值问题,并给出饲料质量最高的混合方案。

将16种加工原料进行混合投放到9个加工窖中进行加工,根据亲缘关系进行组合,构成一个排列组合问题,但由于直接对所有组合求取全局最优解所需要时间代价太大,因此使用随机选取的方式来不断选取局部最大值,在局部优化的基础上找到近似的全局最优解。同时在选择方案时,需要考虑加工窖的质量范围约束。

求解

问题2要求将16种原料分别放入9个加工窖中进行加工,求出饲料质量最高的混合方案并给出每个加工包的亲缘度。问题二的假设是饲料质量仅取决于亲缘度,所以我们的优化目标就是使得不同的满足条件的分配,其亲缘度最大。

将16种原料分别放入9个加工窖中进行加工,这样的分配方案有很多种,每种方案的加工包亲缘度也不同,分配方案具有随机性质。又因为直接进行全局考虑十分耗时,代码的运行时间超出实际承受范围。因此我们在最终处理的循环中可以考虑使用随机选取的方式来不断选取局部最大值,在局部优化的基础上找到近似的全局最优解。

目标函数的建立:

最终的优化对象为总亲缘值,即
K=∑i=19Ki×Wi∑i=19WiK=\frac{\sum_{i=1}^9K_i \times W_i}{\sum_{i=1}^9W_i} K=∑i=19​Wi​∑i=19​Ki​×Wi​​
其中,WiW_iWi​表示第i个加工包的加工重量
Wi=∑j=116wij×EjW_i=\sum_{j=1}^{16}w_{ij}\times E_j Wi​=j=1∑16​wij​×Ej​
混合的方案则为wijw_{ij}wij​
原料总重量:
WMj=∑i=19wijWM_j=\sum_{i=1}^9 w_{ij} WMj​=i=1∑9​wij​
加工包总重量:
WCi=∑j=116wijWC_i=\sum_{j=1}^{16} w_{ij} WCi​=j=1∑16​wij​
加工包总重量要符合加工窖标准:
Pim≤WCi≤PhmP_{im}\le WC_i \le P_{hm} Pim​≤WCi​≤Phm​
n=1时,加工窖只有一种原料,重量要超过500kg:
WCi≥500,n=1WC_i \ge 500,n=1 WCi​≥500,n=1
j=10时,原料10必须混合才能加工:
WCi−wij>0,j=10,n≥2WC_i-w_{ij}>0,j=10,n \ge 2 WCi​−wij​>0,j=10,n≥2
只有一种原料时亲缘值为10:
Ki=10,n=1K_i=10,n=1 Ki​=10,n=1
加工包必须任意两个原料亲缘值不为0:
Ci∈BC_i \in B Ci​∈B
根据上述条件建立问题2的优化模型,即:
maxK=∑i=19Ki×Wi∑i=19Wimax \quad K=\frac{\sum_{i=1}^9K_i \times W_i}{\sum_{i=1}^9W_i} maxK=∑i=19​Wi​∑i=19​Ki​×Wi​​
s.t.{Wi=∑j=116wij×EjWCi=∑j=116wijPim≤WCi≤PhmWCi≥500,n=1WCi−wij>0,j=10,n≥2Ki=10,n=1Ci∈Bs.t.\left\{ \begin{aligned} W_i&=\sum_{j=1}^{16}w_{ij}\times E_j \\ WC_i&=\sum_{j=1}^{16} w_{ij}\\ P_{im}&\le WC_i \le P_{hm}\\ WC_i &\ge 500,n=1\\ WC_i&-w_{ij}>0,j=10,n \ge 2\\ K_i&=10,n=1\\ C_i &\in B \end{aligned} \right. s.t.⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧​Wi​WCi​Pim​WCi​WCi​Ki​Ci​​=j=1∑16​wij​×Ej​=j=1∑16​wij​≤WCi​≤Phm​≥500,n=1−wij​>0,j=10,n≥2=10,n=1∈B​
模型求解:

1.wijw_{ij}wij​分配的求解过程:考虑不同混合方案对wijw_{ij}wij​分配不同,每种个原料都可以拆分,因此以每一种原料重量的1/10为步长进行循环迭代,结合随机数的选取,不停的考虑不同情况的分配,直至求到局部最优解。

2.根据1求解后的结果,读取亲缘值表,计算出各加工窖的亲缘值,最终求得总亲缘值。

求解结果:

模型优化求解后,可得按权重平均后的亲缘度为4.845937217,此时的饲料加工配比图如下图所示,即饲料加工质量最高的配比情况。经检验该配比满足所有的约束条件。

问题三题解

分析

问题 3 是将16 个加工原料进行混合全部放入9个加工窖中,求出平均效能率超过 80%的加工包数量最多的混合方案并给出每个加工包的效能率。问题三的求解与问题二类似,可以在问题二的基础上改变目标函数和约束条件,寻找加工原料的最优混合方案。

问题中包含16种元素,9个加工窖。假设在加工原料混合方案确定后,将混合原料投放到9个加工窖形成 9 个加工包,每一个加工包都有一个效能率。 因此需建立起优化目标函数,在问题2的基础之上结合题目所给的约束条件进行穷举和筛选,获得最优解,给出方案配比完成表3。

求解

问题 3 是将 16 个加工原料进行混合全部放入 9 个加工窖中,求出平均效能 率超过 80%的加工包数量最多的混合方案并给出每个加工包的效能率。对于问题3,可以建立在问题2的约束条件下,改变部分约束条件和优化目标进行建模求解。

假设每种加工原料的能耗率不随时间变化,且加工包的能耗率不受加工窖影响,只和原料的能耗率有关。因此,单个加工包的能耗率只与其加工窖中的加工原料及其质量有关。据此,根据题目所给的每种原料的能耗率建立优化目标函数,确定约束条件进行求解,并将最终结果填入附表3。

确立目标函数:

ECiEC_iECi​表示第i个加工包中原料的平均能耗率,则
ECi=WiWCi=∑j=116wij∗Ej∑j=116wijEC_i = \frac{W_i}{WC_i}=\frac{\sum_{j=1}^{16}w_{ij}*E_j}{\sum_{j=1}^{16}w_{ij}} ECi​=WCi​Wi​​=∑j=116​wij​∑j=116​wij​∗Ej​​

EtE_tEt​表示平均能耗率大于0.8的加工包数量,令g(ECi)g(EC_i)g(ECi​)为
g={1,ECi≥0.80,ECi≤0.8g=\left\{ \begin{aligned} 1&,EC_i \ge 0.8 \\ 0&,EC_i\leq0.8 \end{aligned} \right. g={10​,ECi​≥0.8,ECi​≤0.8​

故目标函数为
maxEt=∑i=19g(ECi)max \quad E_t = \sum_{i=1}^{9}g(EC_i) maxEt​=i=1∑9​g(ECi​)

对于约束条件,基本与问题2类似,即
s.t.{Wi=∑j=116wij×EjWCi=∑j=116wijPim≤WCi≤PhmWCi≥500,n=1WCi−wij>0,j=10,n≥2Ki=10,n=1Ci∈Bs.t.\left\{ \begin{aligned} W_i&=\sum_{j=1}^{16}w_{ij}\times E_j \\ WC_i&=\sum_{j=1}^{16} w_{ij}\\ P_{im}&\le WC_i \le P_{hm}\\ WC_i &\ge 500,n=1\\ WC_i&-w_{ij}>0,j=10,n \ge 2\\ K_i&=10,n=1\\ C_i &\in B \end{aligned} \right. s.t.⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧​Wi​WCi​Pim​WCi​WCi​Ki​Ci​​=j=1∑16​wij​×Ej​=j=1∑16​wij​≤WCi​≤Phm​≥500,n=1−wij​>0,j=10,n≥2=10,n=1∈B​

模型求解:

1.先根据所给效能率信息,同时筛选出本身效能率超过0.8和低于0.8的原料。对低于0.8比较多的原料来说,想要达到超过0.8的效能率,必须搭配一个效能率超过0.8的原料,而本题的原料2,质量大并且效能率低,想要最终超过0.8必须搭配很多高效能的原料,无疑是一种浪费。因此优化考虑增加条件,尽可能把原料2单独分配

2.对满足条件的情况分别用不同的搜索初值进行搜索遍历,并计算最终效能率超过0.8的个数

3.将上述局部最优值与第2问结果比对,取出更大的那一个。

根据模型进行求解计算,得到优化结果,平均能耗率大于0.8的加工包有7个,将题目中所给的表3补充完整,结果如图6:

问题四题解

分析

问题4要求在允许部分加工窖不生产的情况下,满足给定的两个条件,一个是成本尽量低,另一个是平均效能率超过80%的加工包尽量多。取消一次性加工的限制。

根据题目要求,该问题属于双目标优化问题,各种约束条件下设计出一个可以使得成本最小化、平均效能率超过80%的加工包尽量多的混合方案。我们将双目标优化问题通过加权转化为单目标优化问题。从成本以及效能率两个角度进行考虑,将复杂的任务预定规则转化为约束条件。在考虑加工成本最低时,我们发现加工窖的容量越大, 加工成本越低,因此优先使用加工容量较大的加工窖进行加工。我们按照加工要求,设定约束条件,求解双目标优化模型。

求解

问题4要求如果饲料加工厂允许部分加工窖不生产,建立数学模型,给出混合加工方案,用尽量低的加工成本完成整个加工任务,同时要求平均能耗率超过80%的加工包尽量的多。因此这是一个双目标优化问题,一个是成本尽可能低,第二个是平均能耗率超过80%的加工包尽量的多。经计算我们得知所有加工窖的最大加工能力是8100kg,所需要加工的原料一共为6000kg,可以得知最多停用3个加工窖,即i =1,2,…, p且p仅能取8,7,6。

问题4的优化目标有两个,即成本更少和效能率大于0.8的加工包最多。因此目标函数为双目标函数
s.t.{minST=∑i=1pSimaxET=∑i=1pg(ECi)s.t.\left\{ \begin{aligned} min\quad ST &= \sum_{i=1}^{p}S_i\\ max\quad ET &=\sum_{i=1}^{p}g(EC_i) \end{aligned} \right. s.t.⎩⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎧​minSTmaxET​=i=1∑p​Si​=i=1∑p​g(ECi​)​其中p可取6,7,8

先考虑加工成本的目标,根据题目要求,加工成本只考虑点火成本Si1S^1_iSi1​和加工量成本Si2S^2_iSi2​。

点火成本 Si1∈400,500,600S^1_i\in{400,500,600}Si1​∈400,500,600

加工窖的加工成本:
Si=Si1+Si2∗WCi=Si1+Si2∗∑j=116wij加工窖的加工成本:S_i = S^1_i+S^2_i*WC_i=S^1_i+S^2_i*\sum_{j=1}^{16}w_{ij} 加工窖的加工成本: Si​=Si1​+Si2​∗WCi​=Si1​+Si2​∗j=1∑16​wij​加工窖的加工成本:

总成本:
加工窖的加工成本:
ST=∑i=1pSi加工窖的加工成本:ST=\sum_{i=1}^{p}S_i 加工窖的加工成本: ST=i=1∑p​Si​加工窖的加工成本:

对于双目标函数优化问题,进行线性加权转化为单目标优化问题,另外,需以对于两个单目标函数优化的最优值为基准建立新的目标函数进行优化。

用ST’表示加工成本的基准,ET’表示效能率大于0.8的加工包数量的基准,则
{ET′=ETmaxST′=STmin\left\{ \begin{aligned} ET' &= ET_{max}\\ ST'&=ST_{min} \end{aligned} \right. {ET′ST′​=ETmax​=STmin​​

综上我们建立的目标函数为:
加工窖的加工成本:
max0.5∗ST′minST+0.5∗maxETET′加工窖的加工成本:max 0.5*\frac{ST'}{min ST}+0.5*\frac{max ET}{ET'} 加工窖的加工成本: max0.5∗minSTST′​+0.5∗ET′maxET​加工窖的加工成本:

约束条件为:
s.t.{Wi=∑j=116wij×EjWCi=∑j=116wijPim≤WCi≤PhmWCi≥500,n=1WCi−wij>0,j=10,n≥2Ki=10,n=1Ci∈Bs.t.\left\{ \begin{aligned} W_i&=\sum_{j=1}^{16}w_{ij}\times E_j \\ WC_i&=\sum_{j=1}^{16} w_{ij}\\ P_{im}&\le WC_i \le P_{hm}\\ WC_i &\ge 500,n=1\\ WC_i&-w_{ij}>0,j=10,n \ge 2\\ K_i&=10,n=1\\ C_i &\in B \end{aligned} \right. s.t.⎩⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎧​Wi​WCi​Pim​WCi​WCi​Ki​Ci​​=j=1∑16​wij​×Ej​=j=1∑16​wij​≤WCi​≤Phm​≥500,n=1−wij​>0,j=10,n≥2=10,n=1∈B​

目标函数的求解:

1.先只在搜索过程考虑单目标优化的情况,即成本较低的情况。分别求出单个加工窖的加工成本再进行累加,得到加工过程的总成本,求出总成本最低的最优解。

2.结合1的结果与第3问的结果,分别以这两个最优解为初始值再进行遍历搜索,从而得到同时满足两者的结果。

经过优化计算可得目标函数的最优解为0.9548,即线性加权后的目标函数最优解,对应的加工成本为14350元,效能率大于0.8的加工包数量为5个。图7为最优解所对应的原料配比。

问题五题解

分析

问题5的建模与求解过程是综合考虑前4个问题的求解结果进行优化计算的, 问题5共有3个目标函数,属于多目标函数优化问题。由于这3个目标函数的求解算法已经写好,因此我们直接采用前文的算法进行求解。假设饲料质量、加工成本和效能率对工厂加工的重要性相等,我们分别赋予每个指标 各三分之一的权系数,以问题2、问题3和问题4求解的最优值作为基准,建立新的目标函数进行优化。

求解

问题5要求给出混合加工方案使得饲料质量尽量高、加工成本尽量低、平均效能率超过80%的加工包尽量多。该问题综合问题2-4的三个优化目标,属于多目标函数优化问题。因此,可以采用线性加权法建立新的目标函数,在加权时,令饲料质量、加工成本、效能率大于0.8的加工包数量的权重相同,都为1/3,以问题2、问题3、问题4的求解结果为基准建立目标函数,进行优化。

令ST’、ET’、QT’分别表示只考虑总加工成本的最优解,只考虑效能率大于0.8加工包数量的最优解和饲料质量的最优解。故
{ET′=ETmaxST′=STminQT′=QTmax\left\{ \begin{aligned} ET' &= ET_{max}\\ ST'&=ST_{min}\\ QT'&=QT_{max} \end{aligned} \right. ⎩⎪⎨⎪⎧​ET′ST′QT′​=ETmax​=STmin​=QTmax​​

按照问题5的要求,建立目标函数:
max13∗ST′minST+13∗maxETET′+13∗maxQTQT′max \frac{1}{3}*\frac{ST'}{min ST}+\frac{1}{3}*\frac{max ET}{ET'}+\frac{1}{3}*\frac{max QT}{QT'} max31​∗minSTST′​+31​∗ET′maxET​+31​∗QT′maxQT​

该优化问题的求解过程与问题4类似,但以问题2、3、4中的最优值为基准进行搜索,用python编写程序求最优解。

求解结果:

经优化模型可得如图8 配比为最优解,线性加权后得目标函数得最优解为0.9091,在此种配比情况下平均亲缘值为4.660331,即为质量最好,成本为14474元,效能率大于0.8的加工包数量为4。

附录代码

工具函数

 def get_blood():a='a';b='b';c='c';d='d';e='e';f='f';g='g';h='h';i='i';j='j';k='k';l='l';m='m';n='n';o='o';p='p';q='q';r='r';s='s';t='t';u='u';v='v';w='w';x='x';y='y';z='z';breed=[[] for i in range(16)]breed[0]=[a,b,c,d,e,f,g,h,i,j]breed[1]=[a,b,c,d,e,o,p,k,l,m]breed[2]=[f,g,h,a,j,o,p,k,l,m]breed[3]=[f,g,h,i,j,l,p,f,o,p]breed[4]=[f,b,h    ,d, e   ,o  ,p, a   ,o  ,z]breed[5]=[r,m,t ,u  ,q, f,  g   ,a, f   ,z]breed[6]=[r,s,t ,u  ,k  ,f  ,g  ,h  ,f, c]breed[7]=[r,s,t  ,u  ,a  ,b  ,h  ,i  ,j  ,c]breed[8]=[c,s,a ,f  ,v  ,w  ,a  ,i  ,j  ,c]breed[9]=[b,m,n ,i  ,a  ,z  ,h  ,f  ,o  ,z]breed[10]=[m,a,m,e  ,a  ,z  ,a  ,b  ,a  ,b]breed[11]=[m,c,m,e  ,x  ,h, a   ,b  ,n  ,a]breed[12]=[b,a,n,y  ,c  ,g  ,m  ,b  ,m  ,b]breed[13]=[m,c,m,y, x,  g,  m,  b,  n,  b]breed[14]=[b,x,n,i,  c,  l,  b,  c,  m,  p]breed[15]=[c,c,a,f,  x,  h,  b,  c,  m,  j]blood=np.zeros([16,16])for i in range(16):for j in range(16):flag=0for k in range(10):if breed[i][k]==breed[j][k]:flag+=1blood[i][j]=flag#blood_pd = pd.DataFrame(blood)return blood'''计算加工后的一个加工包的质量'''def get_weight(target,breed):t=0for i in target:t=t+breed[i][0]*breed[i][1]return t'''计算加工前的一个加工包的质量'''def get_weight2(target,breed):t=0for i in target:t=t+breed[i][0]return t'''计算一个加工包的平均亲缘值'''def cal_blood(target,blood):t=0combine  = list(itertools.combinations(target, 2))   if len(combine)==0:return 10for i in combine: t=t+blood[i[0]][i[1]]t=t/len(combine)return t    '''计算一个方案的平均亲缘值'''def get_quality(target,blood):blood1=[0 for i in range(9)]blood2=0for i in range(9):blood1[i]=blood1[i]+cal_blood(target[i],blood)blood2=blood2+get_weight(target[i],breed)*blood1[i]return blood2/4840'''方案描述方法转换'''def trans(a):pit=[[] for i in range(9)]for i in range(16):pit[a[i]-1].append(i)return pit'''求一个加工窖平均能耗率数'''def get_e_single(target):t1=0t2=0for i in target:t1=t1+breed[i][0]*breed[i][1]t2=t2+breed[i][0]if t2==0:return 0t1=t1/t2return t1'''求一个方案中平均能耗率大于0.8的个数'''def get_e(target):flag=0for i in target:if get_e_single(i)>0.8:flag+=1return flag'''求一个方案的成本'''def get_price(target):t=0for i in range(9):t=t+pit[i][2]+get_weight2(target[i],breed)*pit[i][3]   return t

Q1

import matplotlib.pyplot as pltimport seaborn as snsimport pandas as pdimport numpy as npdef get_blood():a='a';b='b';c='c';d='d';e='e';f='f';g='g';h='h';i='i';j='j';k='k';l='l';m='m';n='n';o='o';p='p';q='q';r='r';s='s';t='t';u='u';v='v';w='w';x='x';y='y';z='z';breed=[[] for i in range(16)]breed[0]=[a,b,c,d,e,f,g,h,i,j]breed[1]=[a,b,c,d,e,o,p,k,l,m]breed[2]=[f,g,h,a,j,o,p,k,l,m]breed[3]=[f,g,h,i,j,l,p,f,o,p]breed[4]=[f,b,h    ,d, e   ,o  ,p, a   ,o  ,z]breed[5]=[r,m,t ,u  ,q, f,  g   ,a, f   ,z]breed[6]=[r,s,t ,u  ,k  ,f  ,g  ,h  ,f, c]breed[7]=[r,s,t  ,u  ,a  ,b  ,h  ,i  ,j  ,c]breed[8]=[c,s,a ,f  ,v  ,w  ,a  ,i  ,j  ,c]breed[9]=[b,m,n ,i  ,a  ,z  ,h  ,f  ,o  ,z]breed[10]=[m,a,m,e  ,a  ,z  ,a  ,b  ,a  ,b]breed[11]=[m,c,m,e  ,x  ,h, a   ,b  ,n  ,a]breed[12]=[b,a,n,y  ,c  ,g  ,m  ,b  ,m  ,b]breed[13]=[m,c,m,y, x,  g,  m,  b,  n,  b]breed[14]=[b,x,n,i,  c,  l,  b,  c,  m,  p]breed[15]=[c,c,a,f,  x,  h,  b,  c,  m,  j]blood=np.zeros([16,16])for i in range(16):for j in range(16):flag=0for k in range(10):if breed[i][k]==breed[j][k]:flag+=1blood[i][j]=flag#blood_pd = pd.DataFrame(blood)return bloodblood=get_blood()#sns.heatmap(blood, cmap='Reds')#plt.show()\end{lstlisting}

Q2

blood=get_blood()pit=[[300,600,400,2],[300,600,400,2],[300,600,400,2],[600,900,500,1.8],[600,900,500,1.8],[600,900,500,1.8],[900,1200,600,1.6],[900,1200,600,1.6],[900,1200,600,1.6]]breed=[[300,0.88],[500,0.6],[200,0.93],[500,0.9],[300,0.9],[400,0.78],[300,0.7],[300,0.83],[400,0.95],[600,0.87],[100,0.65],[600,0.75],[500,0.8],[400,0.68],[300,0.87],[300,0.83]]breed_break=[[100,0.88],[100,0.88],[100,0.88],[100,0.6],[100,0.6],[100,0.6],[100,0.6],[100,0.6],[100,0.93],[100,0.93],[500,0.9],[300,0.9],[400,0.78],[300,0.7],[300,0.83],[400,0.95],[600,0.87],[100,0.65],[600,0.75],[500,0.8],[400,0.68],[300,0.87],[300,0.83]]count=0max_blood=0result=[]t_pit=[[] for i in range(9)]for i0 in range(9):if get_weight(t_pit[i0],breed)+breed[0][0]<=pit[i0][1]:t_pit[i0].append(0)else:continuefor i1 in range(9):if get_weight(t_pit[i1],breed)+breed[1][0]<=pit[i1][1]:t_pit[i1].append(1)else:continuefor i2 in range(9):if get_weight(t_pit[i2],breed)+breed[2][0]<=pit[i2][1]:t_pit[i2].append(2)else:continuefor i3 in range(9):if get_weight(t_pit[i3],breed)+breed[3][0]<=pit[i3][1]:t_pit[i3].append(3)else:continuefor i4 in range(9):if get_weight(t_pit[i4],breed)+breed[4][0]<=pit[i4][1]:t_pit[i4].append(4)else:continuefor i5 in range(9):if get_weight(t_pit[i5],breed)+breed[5][0]<=pit[i5][1]:t_pit[i5].append(5)else:continuefor i6 in range(9):if get_weight(t_pit[i6],breed)+breed[6][0]<=pit[i6][1]:t_pit[i6].append(6)else:continuefor i7 in range(9):if get_weight(t_pit[i7],breed)+breed[7][0]<=pit[i7][1]:t_pit[i7].append(7)else:continuefor i8 in range(9):if get_weight(t_pit[i8],breed)+breed[8][0]<=pit[i8][1]:t_pit[i8].append(8)else:continuefor i9 in range(9):if get_weight(t_pit[i9],breed)+breed[9][0]<=pit[i9][1]:t_pit[i9].append(9)else:continuefor i10 in range(9):if get_weight(t_pit[i10],breed)+breed[10][0]<=pit[i10][1]:t_pit[i10].append(10)else:continuefor i11 in range(9):if get_weight(t_pit[i11],breed)+breed[11][0]<=pit[i11][1]:t_pit[i11].append(11)else:continuefor i12 in range(9):if get_weight(t_pit[i12],breed)+breed[12][0]<=pit[i12][1]:t_pit[i12].append(12)else:continuefor i13 in range(9):if get_weight(t_pit[i13],breed)+breed[13][0]<=pit[i13][1]:t_pit[i13].append(13)else:continuefor i14 in range(9):if get_weight(t_pit[i14],breed)+breed[14][0]<=pit[i14][1]:t_pit[i14].append(14)else:continuefor i15 in range(9):if get_weight(t_pit[i15],breed)+breed[15][0]<=pit[i15][1]:t_pit[i15].append(15)count+=1flag=0for constraint in range(9):if get_weight2(t_pit[constraint],breed)<pit[constraint][0] or t_pit[constraint]==[9] or (len(t_pit[constraint])==1 and breed[t_pit[constraint][0]][0]<500):                 flag=1break  if get_quality(t_pit,blood)>+max_blood and flag==0:                                                                       max_blood=get_quality(t_pit,blood)print(t_pit,max_blood)result=copy.copy(t_pit)                                                                   else:continuet_pit[i15].remove(15)t_pit[i14].remove(14)t_pit[i13].remove(13)t_pit[i12].remove(12)t_pit[i11].remove(11)t_pit[i10].remove(10)t_pit[i9].remove(9)t_pit[i8].remove(8)                                   t_pit[i7].remove(7)t_pit[i6].remove(6)t_pit[i5].remove(5)t_pit[i4].remove(4)t_pit[i3].remove(3)t_pit[i2].remove(2)t_pit[i1].remove(1)t_pit[i0].remove(0)#get_quality(trans(a),blood)\end{lstlisting}

Q3

for i0 in range(9):if get_weight(t_pit[i0],breed)+breed[0][0]<=pit[i0][1]:t_pit[i0].append(0)else:continuefor i1 in range(9):if get_weight(t_pit[i1],breed)+breed[1][0]<=pit[i1][1]:t_pit[i1].append(1)else:continuefor i2 in range(9):if get_weight(t_pit[i2],breed)+breed[2][0]<=pit[i2][1]:t_pit[i2].append(2)else:continuefor i3 in range(9):if get_weight(t_pit[i3],breed)+breed[3][0]<=pit[i3][1]:t_pit[i3].append(3)else:continuefor i4 in range(9):if get_weight(t_pit[i4],breed)+breed[4][0]<=pit[i4][1]:t_pit[i4].append(4)else:continuefor i5 in range(9):if get_weight(t_pit[i5],breed)+breed[5][0]<=pit[i5][1]:t_pit[i5].append(5)else:continuefor i6 in range(9):if get_weight(t_pit[i6],breed)+breed[6][0]<=pit[i6][1]:t_pit[i6].append(6)else:continuefor i7 in range(9):if get_weight(t_pit[i7],breed)+breed[7][0]<=pit[i7][1]:t_pit[i7].append(7)else:continuefor i8 in range(9):if get_weight(t_pit[i8],breed)+breed[8][0]<=pit[i8][1]:t_pit[i8].append(8)else:continuefor i9 in range(9):if get_weight(t_pit[i9],breed)+breed[9][0]<=pit[i9][1]:t_pit[i9].append(9)else:continuefor i10 in range(9):if get_weight(t_pit[i10],breed)+breed[10][0]<=pit[i10][1]:t_pit[i10].append(10)else:continuefor i11 in range(9):if get_weight(t_pit[i11],breed)+breed[11][0]<=pit[i11][1]:t_pit[i11].append(11)else:continuefor i12 in range(9):if get_weight(t_pit[i12],breed)+breed[12][0]<=pit[i12][1]:t_pit[i12].append(12)else:continuefor i13 in range(9):if get_weight(t_pit[i13],breed)+breed[13][0]<=pit[i13][1]:t_pit[i13].append(13)else:continuefor i14 in range(9):if get_weight(t_pit[i14],breed)+breed[14][0]<=pit[i14][1]:t_pit[i14].append(14)else:continuefor i15 in range(9):if get_weight(t_pit[i15],breed)+breed[15][0]<=pit[i15][1]:t_pit[i15].append(15)count+=1flag=0for constraint in range(9):if get_weight2(t_pit[constraint],breed)<pit[constraint][0] or t_pit[constraint]==[9] or (len(t_pit[constraint])==1 and breed[t_pit[constraint][0]][0]<500):                 flag=1break  if get_e(t_pit)>max_e and flag==0:                                                                       max_e=get_e(t_pit)print(t_pit,max_e)result=copy.copy(t_pit)                                                                   else:continuet_pit[i15].remove(15)t_pit[i14].remove(14)t_pit[i13].remove(13)t_pit[i12].remove(12)t_pit[i11].remove(11)t_pit[i10].remove(10)t_pit[i9].remove(9)t_pit[i8].remove(8)                                   t_pit[i7].remove(7)t_pit[i6].remove(6)t_pit[i5].remove(5)t_pit[i4].remove(4)t_pit[i3].remove(3)t_pit[i2].remove(2)t_pit[i1].remove(1)t_pit[i0].remove(0)\end{lstlisting}

Q4

for i0 in range(9):if get_weight(t_pit[i0],breed)+breed[0][0]<=pit[i0][1]:t_pit[i0].append(0)else:continuefor i1 in range(9):if get_weight(t_pit[i1],breed)+breed[1][0]<=pit[i1][1]:t_pit[i1].append(1)else:continuefor i2 in range(9):if get_weight(t_pit[i2],breed)+breed[2][0]<=pit[i2][1]:t_pit[i2].append(2)else:continuefor i3 in range(9):if get_weight(t_pit[i3],breed)+breed[3][0]<=pit[i3][1]:t_pit[i3].append(3)else:continuefor i4 in range(9):if get_weight(t_pit[i4],breed)+breed[4][0]<=pit[i4][1]:t_pit[i4].append(4)else:continuefor i5 in range(9):if get_weight(t_pit[i5],breed)+breed[5][0]<=pit[i5][1]:t_pit[i5].append(5)else:continuefor i6 in range(9):if get_weight(t_pit[i6],breed)+breed[6][0]<=pit[i6][1]:t_pit[i6].append(6)else:continuefor i7 in range(9):if get_weight(t_pit[i7],breed)+breed[7][0]<=pit[i7][1]:t_pit[i7].append(7)else:continuefor i8 in range(9):if get_weight(t_pit[i8],breed)+breed[8][0]<=pit[i8][1]:t_pit[i8].append(8)else:continuefor i9 in range(9):if get_weight(t_pit[i9],breed)+breed[9][0]<=pit[i9][1]:t_pit[i9].append(9)else:continuefor i10 in range(9):if get_weight(t_pit[i10],breed)+breed[10][0]<=pit[i10][1]:t_pit[i10].append(10)else:continuefor i11 in range(9):if get_weight(t_pit[i11],breed)+breed[11][0]<=pit[i11][1]:t_pit[i11].append(11)else:continuefor i12 in range(9):if get_weight(t_pit[i12],breed)+breed[12][0]<=pit[i12][1]:t_pit[i12].append(12)else:continuefor i13 in range(9):if get_weight(t_pit[i13],breed)+breed[13][0]<=pit[i13][1]:t_pit[i13].append(13)else:continuefor i14 in range(9):if get_weight(t_pit[i14],breed)+breed[14][0]<=pit[i14][1]:t_pit[i14].append(14)else:continuefor i15 in range(9):if get_weight(t_pit[i15],breed)+breed[15][0]<=pit[i15][1]:t_pit[i15].append(15)count+=1flag=0for constraint in range(9):if get_weight2(t_pit[constraint],breed)<pit[constraint][0] or t_pit[constraint]==[9] or (len(t_pit[constraint])==1 and breed[t_pit[constraint][0]][0]<500):                 flag=1break  if get_price(t_pit)>max_p and flag==0:                                                                       max_p=get_price(t_pit)print(t_pit,max_p)result=copy.copy(t_pit)                                                                   else:continuet_pit[i15].remove(15)t_pit[i14].remove(14)t_pit[i13].remove(13)t_pit[i12].remove(12)t_pit[i11].remove(11)t_pit[i10].remove(10)t_pit[i9].remove(9)t_pit[i8].remove(8)                                   t_pit[i7].remove(7)t_pit[i6].remove(6)t_pit[i5].remove(5)t_pit[i4].remove(4)t_pit[i3].remove(3)t_pit[i2].remove(2)t_pit[i1].remove(1)t_pit[i0].remove(0)

2020五一建模:C题 饲料混合加工问题 题解相关推荐

  1. 721 建模模拟 饲料混合加工问题 (20 五一 C)

    721 饲料混合加工问题 题目整理 加工部分 9个加工窖 16个加工原料(见表1) 一个加工窖的混合产品称为一个加工包 如只有一种原料,一个加工包加工原料重量不少于500千克 品种代码10的加工原料不 ...

  2. 饲料混合加工问题——问题2的混合方案

    原创声明:未经作者允许,不得转载 免费条件:粉丝数.获赞数.收藏数,三者其一超过500 获1.2问完整代码,公众号后台回复:2020_五一_C 个人公众号 题目来源:2020年_五一数学建模_C题 上 ...

  3. 饲料混合加工问题——原料间亲缘值计算

    原创声明:未经作者允许,不得转载 题目来源:2020年_五一数学建模_C题 问题分析 该题的目标是计算两两加工材料之间的亲缘值.实际上就是统计两个等长字符串的相同位置的相同字符的个数,如果相同字符的个 ...

  4. 2023五一建模A题完整版本【原创首发】

    已经完成五一数学建模全部内容,大家可以文末查看!!供参考使用! 摘要 本文研究了喷气式无人机在执行空中物资投放和爆破任务过程中的数学建模问题.我们分析了无人机投放距离与飞行高度.飞行速度.空气阻力等因 ...

  5. 2020年大学生数学建模A题:炉温曲线

    前言 比赛完第一天就开始着手写这篇文章,思维可能有点局限性,如果有更好的思路和想法可以评论出来,一起讨论学习. 完整所有的题目下载(无需积分):2020数学建模赛题 题目整理: 同时已经对该题目给出如 ...

  6. 2022年五一杯数学建模A题血管机器人的订购与生物学习解题全过程及论文和程序

    2022年五一杯数学建模A题 血管机器人的订购与生物学习 原题再现:   随着微机电系统的发展,人类已经可以加工越来越小的机器.这些机器小到一定程度就可以放进血管开展疾病治疗,这就是血管机器人.血管机 ...

  7. 2020数学建模国赛(B题)总结

    简单说一下我们队的情况,一个电子,一个数学,我计算机,团队分工我是负责编程和画图部分,建模主要由两个队友负责,今年的建模题居然有一道很特别的题,这对于爱打游戏的我来说简直就像猫看见了毛球,哦不,是猫看 ...

  8. 2020研究生数学建模E题--AlexNet深度网络解法(大雾能见度估计与预测)(含代码)

    2020研究生数学建模E题--AlexNet深度网络解法(大雾能见度估计与预测)(含代码) 一.E题赛题 二.赛题分析 三.解题 3.1 数据预处理 3.2 AlexNet深度网络 (1)AlexNe ...

  9. 2023年五一数学建模 | 第二十届五一数学建模B题:快递需求分析问题思路

    2023年五一数学建模 | 第二十届五一数学建模B题:快递需求分析问题思路 目录 2023年五一数学建模 | 第二十届五一数学建模B题:快递需求分析问题思路 基本介绍 问题1: 问题2: 问题3: 问 ...

  10. 2020年数维杯数学建模A题舆情监测情感倾向分析建模求解全过程文档及程序

    2020年数维杯数学建模 A题 舆情监测情感倾向分析建模 原题再现:   公共危机事件爆发时,如拍石击水,相关信息在短时间内迅速传播,引起群众的广泛关注.其中负面报道或者主观片面的一些失实评判常常在一 ...

最新文章

  1. 高等数学·同济七版+线性代数第六版+概率论与数理统计第四版(教材+辅导)
  2. JQuery 表单校验插件 validate 使用纪录
  3. python代码基础题-python每日经典算法题5(基础题)+1(中难题)
  4. 037_Unicode对照表三
  5. python 单线程_python的单线程多任务的实现
  6. DELPHI设置枚举类型size
  7. BZOJ 2150: 部落战争 最大流
  8. 第四周作业 简单地邮件发送实现
  9. [转载]用 FFMPEG 合并 MP4 视频
  10. ubuntu 常用命令锦集
  11. 为什么要切换IP地址?
  12. EMC信号完整性落地实测1---走出玄学
  13. Android 调用语音模块
  14. kgm转mp3安卓_酷狗KGM转MP3格式工具电脑版
  15. 仅以此篇纪念负数取模
  16. 2022年下半年信息系统项目管理师下午真题及答案解析
  17. 【SLAM学习笔记】12-ORB_SLAM3关键源码分析⑩ Optimizer(七)地图融合优化
  18. 基于二极管的温度检测电路
  19. python等额本息和等额本金_用Python解读房贷利率,要不要看随你
  20. 水纹效果(Water)源程序.

热门文章

  1. 基于51单片机的超声波倒车雷达防撞系统 proteus仿真 LCD1602显示
  2. html视频播放器兼容处理
  3. 关于我在(PTA)程序设计类实验辅助教学平台的重修经历
  4. Java中的关键字有哪些?
  5. 力软下拉框多选_[力软7.0.6]力软敏捷开发框架敏捷框架前端API
  6. 中国大学MOOC创业基础题库及答案
  7. plc通过无线通讯连接服务器,多个plc无线通讯方案
  8. AE贝塞尔曲线生成插件Bezier Node mac版
  9. 嵌入式Linux开发与单片机开发的区别
  10. 赛门铁克NBU备份oracle慢的问题