【数学建模】天然肠衣搭配问题

2011高教社杯全国大学生数学建模竞赛D题
天然肠衣(以下简称肠衣)制作加工是我国的一个传统产业,出口量占世界首位。肠衣经过清洗整理后被分割成长度不等的小段(原料),进入组装工序。传统的生产方式依靠人工,边丈量原料长度边心算,将原材料按指定根数和总长度组装出成品(捆)。
原料按长度分档,通常以0.5米为一档,如:3-3.4米按3米计算,3.5米-3.9米按3.5米计算,其余的依此类推。表1是几种常见成品的规格,长度单位为米,∞表示没有上限,但实际长度小于26米。
\space   \space   \space   \space   \space   \space   \space   表1 成品规格表

最短长度最大长度根数总长度
36.52089
713.5889
14 ∞ ∞ 589

为了提高生产效率,公司计划改变组装工艺,先丈量所有原料,建立一个原料表。表2为某批次原料描述。
在这里插入图片描述

根据以上成品和原料描述,设计一个原料搭配方案,工人根据这个方案“照方抓药”进行生产。
公司对搭配方案有以下具体要求:
(1) 对于给定的一批原料,装出的成品捆数越多越好;
(2) 对于成品捆数相同的方案,最短长度最长的成品越多,方案越好;
(3) 为提高原料使用率,总长度允许有

天然肠衣搭配问题

  • 提出假设
  • 问题简单复述:
    • 对应每一个任意种类的成品建立第一种模型
    • 基于成品分配方案的第二种模型
      • 模型二总结
    • 手动实现局部最优解
      • 局部最优解

提出假设

假设降级使用仅可降一级,不可多级降,如如长度为14米的原料不可以和长度介于3-6.5米的进行捆扎

问题简单复述:

用以0.5米为一档给出的原料按指定根数总长度组装出成品,为此设计一个原料搭配方案。
方案好坏比较首先是装出的成品捆数越多越好;其次捆数相同的方案,最短长度为14的成品越多,方案越好
使用附带原则有总长度允许有 ± 0.5 ± 0.5 ±0.5米的误差,总根数允许比标准少 1 1 1根;某种规格对应原料如果出现剩余,可以降级使用。

建立数学模型:
首先考虑装出的成品捆数,设三种不同最短长度(从小到大)的成品个数依次为 x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3
装出的成品捆数越多越好有:
m a x = ∑ 1 ≤ i ≤ 3 x i max = \sum_{1 \le i \le 3} x_i max=1i3xi

为了简化问题,解决最短长度为14的成品越多,方案越好的方案为:
设已求得一组可行解 x 1 ′ , x 2 ′ , x 3 ′ x_1',x_2',x_3' x1,x2,x3
加入限制条件
x 3 > x 3 ′ x_3 > x_3' x3>x3

考虑原料如果出现剩余,可以降级使用。那么解决顺序应该是成品三,成品二,成品一。
因为每个成品最短长度到最长长度的区间没有重叠,所以三个成品可以分开讨论。

对应每一个任意种类的成品建立第一种模型

设原料按长度由小到大的使用个数依次为 y 1 , y 2 , . . . , y n y_1 ,y_2 ,...,y_n y1,y2,...,yn,总长度为 a a a,根数为 b i ′ b_{i'} bi,最小大长度 c i ′ c_{i'} ci,最大长度 c j ′ c_{j'} cj
都要满足
成品总长度在标准的 ± 0.5 ± 0.5 ±0.5米误差范围内:
a − 0.5 ≤ ( 3 + 0.5 ( i − 1 ) ) y i + ( 3 + 0.5 i ) y i + 1 + . . . ( 3 + 0.5 ( j − 1 ) ) y j ≤ a + 0.5 a-0.5 \le (3+0.5(i-1))y_i+(3+0.5i)y_{i+1}+...(3+0.5(j-1))y_j \le a+0.5 a0.5(3+0.5(i1))yi+(3+0.5i)yi+1+...(3+0.5(j1))yja+0.5
总根数和标准一致或总根数比标准少 1 1 1根:
y i + y i + 1 + . . . + y j = b i ′ − z , z = 0 / 1 y_i + y_{i+1} + ... +y_j = b_{i'}-z , z = 0/1 yi+yi+1+...+yj=biz,z=0/1
使用的原料长度在成品规格表的标准长度范围内
2 ( c i ′ − 3 ) − 1 ≤ y k ≤ 2 ( c j ′ − 3 ) − 1 , i ≤ k ≤ j 2(c_{i'} - 3) -1 \le y_k\le 2(c_{j'} - 3) -1 , i\le k \le j 2(ci3)1yk2(cj3)1,ikj
考虑原料如果出现剩余,可以降级使用。我们设上一级(如果有的话)的的最大长度为 c j ′ + 1 c_{j'+1} cj+1
2 ( c i ′ − 3 ) − 1 ≤ y k ≤ 2 ( c j ′ + 1 − 3 ) − 1 , i ≤ k ≤ j 2(c_{i'} - 3) -1 \le y_k\le 2(c_{j'+1} - 3) -1 , i\le k \le j 2(ci3)1yk2(cj+13)1,ikj

因为做出一个成品,对应使用的原料数量会降低,设原料按长度由小到大的减少总个数依次为 u 1 , u 2 , . . . , u n u_1 ,u_2 ,...,u_n u1,u2,...,un,原料按长度由小到大的总个数依次为 d 1 d 2 , . . . , d n d_1 d_2 ,...,d_n d1d2,...,dn

我们要满足每一次原料都不能凭空产生
y i ≤ d i − u i , 1 ≤ i ≤ n y_i \le d_i - u_i ,1 \le i \le n yidiui,1in

并且当满足 { a − 0.5 ≤ ( 3 + 0.5 ( i − 1 ) ) y i + ( 3 + 0.5 i ) y i + 1 + . . . ( 3 + 0.5 ( j − 1 ) ) y j ≤ a + 0.5 y i + y i + 1 + . . . + y j = b i − z , z = 0 / 1 2 ( c i ′ − 3 ) − 1 ≤ y k ≤ 2 ( c j ′ + 1 − 3 ) − 1 , i ≤ k ≤ j y i ≤ d i − u i , 1 ≤ i ≤ n \begin{cases} a-0.5 \le (3+0.5(i-1))y_i+(3+0.5i)y_{i+1}+...(3+0.5(j-1))y_j \le a+0.5\\ y_i + y_{i+1} + ... +y_j = b_i-z , z = 0/1 \\ 2(c_{i'} - 3) -1 \le y_k\le 2(c_{j'+1} - 3) -1 , i\le k \le j \\ y_i \le d_i - u_i ,1 \le i \le n \end{cases} a0.5(3+0.5(i1))yi+(3+0.5i)yi+1+...(3+0.5(j1))yja+0.5yi+yi+1+...+yj=biz,z=0/12(ci3)1yk2(cj+13)1,ikjyidiui,1in的时候对应种类的成品数量加一,即 x i = x i + 1 x_i=x_i+1 xi=xi+1,并且原材料使用后对应的原材料数目减少,即 u i = u i + y i , 1 ≤ i ≤ n u_i =u_i+y_i , 1 \le i \le n ui=ui+yi,1in

C++

#include <iostream>
#include <vector>
#include <array>
using namespace std;
int cnt[] ={43,59,39,41,27,28,34,21,24,24,20,25,21,23,21,18,31,23,22,59,18,25,35,29,30,42,28,42,45,49,50,64,52,63,49,35,27,16,12,2,0,6,0,0,0,1}; // 3+0.5i
int x[4];
int x_3 = 0;//已知x3的最大解
void solve();double min_size = 3,max_size =6.5,total_size =89;
int roots_Number = 20;
int f_xi = 1;double now_total_size=0;
int now_roots_Number = 0;
void f(  int k ,int u){if(now_total_size <= 0.5 + total_size && now_total_size >= total_size - 0.5){if(now_roots_Number == roots_Number || now_roots_Number == roots_Number-1){x[f_xi] = max(x[f_xi],u+1);double kt = now_total_size;int kr = now_roots_Number;now_total_size = now_roots_Number = 0;f(((int)max_size - 3)*2,u+1);now_total_size = kt , now_roots_Number = kr;return ;}else return ;}//if(now_total_size>0.5 + total_size)return ; // cut down
#if 0 //small to bigif(3+0.5*k > max_size)return ; // can't choseint ct = min(cnt[k] ,(int)((total_size -  now_total_size)/(3+0.5*k)));for(int i=0;i<=ct;i++){cnt[k]-=i;f(now_total_size+i*(3+0.5*k) , now_roots_Number+i ,k+1,u );cnt[k]+=i;}
#endif
#if 1 // big to smallif(3+0.5*k < min_size)return ; // can't choseint ct = min(cnt[k] ,(int)((total_size -  now_total_size)/(3+0.5*k)));ct = min(ct,roots_Number - now_roots_Number);//if(now_roots_Number > roots_Number)return ;for(int i=0;i<=ct;i++){cnt[k]-=i;now_total_size += i*(3+0.5*k);now_roots_Number+=i;f(k-1,u);now_total_size -= i*(3+0.5*k);now_roots_Number-=i;cnt[k]+=i;}
#endif
}void solve(){//排除要求四/*min_size = 3,max_size =6.5,total_size =89;roots_Number = 20;f_xi = 1;now_total_size=0;now_roots_Number = 0;f(((int)max_size - 3)*2,0);//3+0.5*k = min_size//k = (min_size - 3) / 0.5min_size = 7,max_size =13.5,total_size =89;roots_Number = 8;f_xi = 2;now_total_size=0;now_roots_Number = 0;f(((int)max_size - 3)*2,0);*/min_size = 14,max_size =25.5,total_size =89;roots_Number = 5;f_xi = 3;now_total_size=0;now_roots_Number = 0;f((max_size - 3)*2,0);cout << x[3];
}int main() {solve();return 0;
}

基于成品分配方案的第二种模型

考虑到第一种模型跑程序时候,就算剪枝也会跑许多多余的分支,考虑到本题是分配问题,并且每一种成品规格限制比较死,所以我们可以列出该成品分配的所有方案。

可以自行运行一下程序查看所有方案,对应成品三有1823种
C++

#include <iostream>
#include <vector>
#include <array>
using namespace std;
int cnt[46] ={43,59,39,41,27,28,34,21,24,24,20,25,21,23,21,18,31,23,22,59,18,25,35,29,30,42,28,42,45,49,50,64,52,63,49,35,27,16,12,2,0,6,0,0,0,1}; // 3+0.5i
int x[4];
int x_3 = 0;//已知x3的最大解
void solve();double min_size = 3,max_size =6.5,total_size =89;
int roots_Number = 20;
int f_xi = 1;double now_total_size=0;
int now_roots_Number = 0;
int bt = 1;
int a[46];
void f(  int k ,int u){if(now_total_size <= 0.5 + total_size && now_total_size >= total_size - 0.5){if(now_roots_Number == roots_Number || now_roots_Number == roots_Number-1){cout << "\n\n方案" << bt << ":\n|";int kk = 0;for(int i=0;i<=45;i++){if(a[i]){cout << 3+0.5*i << '|';kk++;}}cout << "\n|";for(int i=0;i<kk;i++){cout << "--|";}cout << "\n|";for(int i=0;i<=45;i++){if(a[i])cout << a[i] << '|';}bt++;return ;}else return ;}//if(now_total_size>0.5 + total_size)return ; // cut down
#if 0 //small to bigif(3+0.5*k > max_size)return ; // can't choseint ct = min(cnt[k] ,(int)((total_size -  now_total_size)/(3+0.5*k)));for(int i=0;i<=ct;i++){cnt[k]-=i;f(now_total_size+i*(3+0.5*k) , now_roots_Number+i ,k+1,u );cnt[k]+=i;}
#endif
#if 1 // big to smallif(3+0.5*k < min_size)return ; // can't choseint ct = min(cnt[k] ,(int)((total_size -  now_total_size)/(3+0.5*k)));ct = min(ct,roots_Number - now_roots_Number);//if(now_roots_Number > roots_Number)return ;for(int i=0;i<=ct;i++){cnt[k]-=i;now_total_size += i*(3+0.5*k);now_roots_Number+=i;a[k]+=i;f(k-1,u);now_total_size -= i*(3+0.5*k);now_roots_Number-=i;cnt[k]+=i;a[k]-=i;}
#endif
}void solve(){//排除要求四/*min_size = 3,max_size =6.5,total_size =89;roots_Number = 20;f_xi = 1;now_total_size=0;now_roots_Number = 0;f(((int)max_size - 3)*2,0);//3+0.5*k = min_size//k = (min_size - 3) / 0.5min_size = 7,max_size =13.5,total_size =89;roots_Number = 8;f_xi = 2;now_total_size=0;now_roots_Number = 0;f(((int)max_size - 3)*2,0);*/min_size = 14,max_size =25.5,total_size =89;roots_Number = 5;f_xi = 3;now_total_size=0;now_roots_Number = 0;f((max_size - 3)*2,0);}int main() {solve();return 0;
}

下面列出其中几个方案
方案1:

17.518
32

方案2:

1717.518
113

方案3:

17.518
23

方案1467:

1414.51621.522.5
11111

方案1653:

1414.51521.523.5
11111

方案1800:

2020.522.525.5
1111

方案1823:

16.523.525.5
121

列出该成品分配的所有方案后,设计第二种模型:
设使用方案 i i i的次数为 y i y_i yi,原料按长度由小到大的总个数依次为 d 1 d 2 , . . . , d n d_1 d_2 ,...,d_n d1d2,...,dn
方案总数为 a a a;方案 i i i使用第 j j j种原料数量为 z i j z_{ij} zij
对于每一个原料我们都得
d i ≥ ∑ 1 ≤ j ≤ a y j ∗ z j i , 1 ≤ i ≤ n d_i \ge \sum_{1 \le j \le a} y_j*z_{ji} , 1\le i \le n di1jayjzji,1in
max ⁡ ∑ 1 ≤ i ≤ a y i \max \sum_{1\le i \le a}y_i max1iayi

对于成品三:
Lingo

sets:aa/1..46/:d;bb/1..1823/:y;cc(bb,aa):z;
endsets
data:d = 43,59,39,41,27,28,34,21,24,24,20,25,21,23,21,18,31,23,22,59,18,25,35,29,30,42,28,42,45,49,50,64,52,63,49,35,27,16,12,2,0
,6,0,0,0,1;enddata
max = @sum(bb(i):y(i));
@for(bb(i):@gin(y(i)));
@for(bb(i):y(i)>0);
@for(aa(i):d(i)>@sum(bb(j):y(j)*z(j,i)));

将下面C++程序运行结果带入上面Lingo中 , 在data: enddata 里面加 z = …

#include <iostream>
#include <vector>
#include <array>
using namespace std;
int cnt[46] ={43,59,39,41,27,28,34,21,24,24,20,25,21,23,21,18,31,23,22,59,18,25,35,29,30,42,28,42,45,49,50,64,52,63,49,35,27,16,12,2,0,6,0,0,0,1}; // 3+0.5i
void solve();double min_size = 3,max_size =6.5,total_size =89;
int roots_Number = 20;
double now_total_size=0;
int now_roots_Number = 0;
int bt = 1;
int a[46];
void f(  int k ,int u){if(now_total_size <= 0.5 + total_size && now_total_size >= total_size - 0.5){if(now_roots_Number == roots_Number || now_roots_Number == roots_Number-1){//方案数在后for(int i=0;i<=45;i++){//cout << "z(" << i  << "," << bt << ")=" << a[i] << '\n';cout << a[i] << ",";}bt++;return ;}else return ;}if(3+0.5*k < min_size)return ; // can't choseint ct = min(cnt[k] ,(int)((total_size -  now_total_size)/(3+0.5*k)));ct = min(ct,roots_Number - now_roots_Number);//if(now_roots_Number > roots_Number)return ;for(int i=0;i<=ct;i++){cnt[k]-=i;now_total_size += i*(3+0.5*k);now_roots_Number+=i;a[k]+=i;f(k-1,u);now_total_size -= i*(3+0.5*k);now_roots_Number-=i;cnt[k]+=i;a[k]-=i;}
}void solve(){min_size = 14,max_size =25.5,total_size =89;roots_Number = 5;f_xi = 3;now_total_size=0;now_roots_Number = 0;f((max_size - 3)*2,0);
}int main() {solve();return 0;
}

Lingo求解得

Objective value:                              137.0000
Objective bound:                              137.0000

修改一下Lingo,添加下面这一行可以查看剩余原料数量

@for(aa(i):u(i) = d(i)-@sum(bb(j):y(j)*z(j,i)));

同上处理成品一二得到最终程序
Lingo

sets:aa/1..46/:d,u,v;bb/1..1823/:y;cc(bb,aa):z;dd/1..466598/:x;ee(dd,aa):e;ff/1..2861814/:fgg(ff,aa):h;
endsets
data:d = 43,59,39,41,27,28,34,21,24,24,20,25,21,23,21,18,31,23,22,59,18,25,35,29,30,42,28,42,45,49,50,64,52,63,49,35,27,16,12,2,0
,6,0,0,0,1;enddata
!成品三
!max = @sum(bb(i):y(i));
@sum(bb(i):y(i)) > 137;
@for(bb(i):@gin(y(i)));
@for(bb(i):y(i)>0);
@for(aa(i):d(i)>@sum(bb(j):y(j)*z(j,i)));
@for(aa(i):u(i) = d(i)-@sum(bb(j):y(j)*z(j,i)));
!成品二
@sum(dd(i):x(i)) > ...;!求成品三后成品二最大组成数量+@for(dd(i):@gin(x(i)));
@for(dd(i):x(i)>0);
@for(aa(i):u(i)>@sum(dd(j):x(j)*e(j,i)));
@for(aa(i):v(i) = d(i)-@sum(dd(j):x(j)*e(j,i)));
!成品一
@for(ff(i):@gin(f(i)));
@for(ff(i):f(i)>0);
@for(aa(i):v(i)>@sum(ff(j):f(j)*h(j,i)));
max = @sum(bb(i):y(i)) + @sum(dd(j):x(j)) + @sum(dd(j):x(j));

需要在C++/其他程序中跑出成品一的2861814种方案的列表和成品二的466598种方案的列表。加在上述代码中。或者用其他方式给e和f赋值

e = ... !成品二的方案
h = ... !成品一的方案

模型二总结

思路总结:配完成品三,得出剩余的原材料数量,再配成品二,得出剩余原材料数量,最后配成品一。最后得到最优配比

目前的问题:无法有效的解决剩余这个关键,剩余条件为剩下的无法组成任何一种成品方案。
仅靠代码@sum(bb(i):y(i)) > 137;去约束剩余这个条件,只是局部最优,而不一定是全局最优

代码优化思路:例如成品三对于前面20多个都没用,直接优化掉;成品二一同上

难点:目前已知成品一方案数多达百万量级

手动实现局部最优解

虽然得出的答案不一定是全局最优,但可以先试试手动模拟成品三,二,一的步骤,先得出一种(多种)局部最优。如果有规律或者新的上限模型,就可以推出某一个局部最优解即是全局最优
按照模型二跑一次成品三

  Objective value:                              137.0000Objective bound:                              137.0000U( 30)        1.000000            0.000000

长度范围为 17.5 − 17.9 17.5-17.9 17.517.9剩余1根
将剩余的长度的带入,得出成品二的分配方案有12729种,相比于带入无处理成品三后数据的直接计算的分配方案少了一个量级。

将成品二的分配方案带入模型和程序中得:

Objective value:                              37.00000Objective bound:                              37.00000U( 1)        43.00000            0.000000U( 2)        59.00000            0.000000U( 3)        39.00000            0.000000U( 4)        41.00000            0.000000U( 5)        27.00000            0.000000U( 6)        28.00000            0.000000U( 7)        34.00000            0.000000U( 8)        21.00000            0.000000U( 9)        23.00000            0.000000U( 10)        23.00000            0.000000U( 11)        7.000000            0.000000U( 12)        1.000000            0.000000U( 14)        2.000000            0.000000U( 15)        2.000000            0.000000U( 17)        1.000000            0.000000

将剩余的长度的带入,得出成品一的分配方案有1213327种,相比于带入无处理成品二后数据的直接计算的分配方案量级没变。

但如果不算降级处理的东西分配方案仅有59942种

单独解决成品一:

  Global optimal solution found.Objective value:                              14.00000Objective bound:                              14.00000Infeasibilities:                              0.000000Extended solver steps:                               0Total solver iterations:                          8821Variable           Value        Reduced CostU( 2)        5.000000            0.000000U( 4)        6.000000            0.000000U( 5)        1.000000            0.000000U( 6)        3.000000            0.000000U( 9)        23.00000            0.000000U( 10)        23.00000            0.000000U( 11)        7.000000            0.000000U( 12)        1.000000            0.000000U( 14)        2.000000            0.000000U( 15)        2.000000            0.000000U( 17)        1.000000            0.000000

局部最优解

成品三137个,成品二37个,成品三14个,总188个

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

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

相关文章

基于springboot实现可盈保险合同管理系统项目【项目源码+论文说明】

基于springboot实现可盈保险合同管理系统演示 摘要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本可盈保险合同管理系统就是在这样的大环境下诞生&#xff0c;其…

C#里如何设置输出路径,不要net7.0-windows

官网介绍&#xff1a; 更改生成输出目录 - Visual Studio (Windows) | Microsoft Learn <PropertyGroup> <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath> <AppendRuntimeIdentifierToOutputPath>false</Appen…

git bash各分支修改内容不同但合并后不显示冲突问题

在跟着廖雪峰老师的git学习时&#xff0c;按部就班的执行明后&#xff0c;发现 而不是出现原文的结果 解决方法&#xff1a; 切换位feature分支&#xff0c;再合并 git switch feature1 git merge master 此时我们发现&#xff1a; 后面再跟着原文敲就可以了

每日一题5:Pandas-修改列

一、每日一题 一家公司决定增加员工的薪水。 编写一个解决方案&#xff0c;将每个员工的薪水乘以2来 修改 salary 列。 返回结果格式如下示例所示。 解答&#xff1a; import pandas as pddef modifySalaryColumn(employees: pd.DataFrame) -> pd.DataFrame:employees.loc[…

如何更好地使用Kafka? - 故障时解决

要确保Kafka在使用过程中的稳定性&#xff0c;需要从kafka在业务中的使用周期进行依次保障。主要可以分为&#xff1a;事先预防&#xff08;通过规范的使用、开发&#xff0c;预防问题产生&#xff09;、运行时监控&#xff08;保障集群稳定&#xff0c;出问题能及时发现&#…

Databend 开源周报第 143 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 了解 Databend …

Redis学习(十)|使用消息队列的重试机制实现 MySQL 和 Redis 的数据一致性

文章目录 介绍原理整体方案实现步骤示例代码总结其他&#xff1a;Kafka 重试策略配置1. 生产者重试策略配置2. 消费者重试策略配置 介绍 在分布式系统中&#xff0c;保持 MySQL 和 Redis 之间的数据一致性是至关重要的。为了确保数据的一致性&#xff0c;我们通常采取先更新数…

去中心化金融与Web3:科技驱动的金融革命

随着区块链技术的发展和普及&#xff0c;去中心化金融&#xff08;DeFi&#xff09;作为其重要应用之一&#xff0c;正在成为金融领域的一场革命。结合Web3技术&#xff0c;去中心化金融正在以前所未有的方式重新定义着金融服务和产品的交付方式&#xff0c;推动着金融领域的创…

bfs之八数码

文章目录 八数码解题思路图解举例算法思路 代码CPP代码Java代码 八数码 在一个 33的网格中&#xff0c;1∼8这 8个数字和一个 x 恰好不重不漏地分布在这 33 的网格中。 例如&#xff1a; 1 2 3 x 4 6 7 5 8在游戏过程中&#xff0c;可以把 x 与其上、下、左、右四个方向之一…

【Oracle】Linux x86-64 安装Oracle 23AI指南

本文为云贝教育 刘峰 原创&#xff0c;请尊重知识产权&#xff0c;转发请注明出处&#xff0c;不接受任何抄袭、演绎和未经注明出处的转载。 前言 在信息技术日新月异的今天&#xff0c;企业级数据库系统扮演着数据管理与业务支撑的核心角色。Oracle数据库&#xff0c;作为全球…

IAP15W4K61S4单片机EEPROM读写程序

/*-------------关闭IAP----------------*/ void IapIdle() { IAP_CONTR 0; //关闭IAP功能 IAP_CMD 0; //清除命令寄存器 IAP_TRIG 0; …

专业软件测试会议

全国软件测试会议&#xff1a;这是一个系列性的专业会议&#xff0c;由中国的学术机构或专业组织主办&#xff0c;例如中国计算机学会的容错计算专业委员会。此会议自2005年起开始举办&#xff0c;历届会议地点包括北京、昆明和武汉等地。会议内容覆盖软件测试理论、实践、工具…

跟TED演讲学英文:4 pillars of college success in science by Freeman Hrabowski

4 pillars of college success in science Link: https://www.ted.com/talks/freeman_hrabowski_4_pillars_of_college_success_in_science Speaker: Freeman Hrabowski Date: February 2013 文章目录 4 pillars of college success in scienceIntroductionVocabularyTranscr…

uniapp打包的程序在Xcode中运行到模拟器报错的解决方法

uniapp打包的程序在Xcode中运行到模拟器报错的解决方法 问题描述&#xff1a; Building for iOS-simulator, but linking in object file (/Users/hori/Documents/SDK/SDK/Libs/DCUniRecord.framework/DCUniRecord[arm64][3](PGRecord.o)) built for iOS Linker command fail…

ISIS的工作原理

1.邻居关系建立 &#xff08;1&#xff09;IS-IS领接关系建立原则 1、通过将以太网接口模拟成点到点接口&#xff0c;可以建立点到点链路邻接关系。 2、当链路两端IS-IS接口的地址不在同一网段时&#xff0c;如果配置接口对接收的Hello报文不作IP地址检查&#xff0c;也可以建…

网络基础(1)详解

目录 1.计算机网络背景 2.网络协议 3.网络中的地址管理 1.计算机网络背景 1.1 网络发展 (1)计算机从独立模式到网络互联(多态计算机连接共享数据)再到局域网LAN(通过交换机和路由器连接)接着是广域网WAN 1.2 协议 协议就是双方的一种约定. 为什么要有协议? 因为在数据长距…

LeetCode 面试经典150题 252.会议室

题目&#xff1a;给定一个会议时间安排的数组 intervals &#xff0c;每个会议时间都会包括开始和结束的时间 intervals[i] [starti, endi] &#xff0c;请你判断一个人是否能够参加这里面的全部会议。 思路&#xff1a;因为一个人在同一时刻只能参加一个会议&#xff0c;因此…

一起刷C语言菜鸟教程100题(15-26含解析)

五一过的好快&#xff0c;五天假期说没就没&#xff0c;因为一些事情耽搁到现在&#xff0c;不过还是要继续学习的&#xff0c;之后就照常更新&#xff0c;先说一下&#xff0c;这个100题是菜鸟教程里面的&#xff0c;但是有一些题&#xff0c;我加入了自己的理解&#xff0c;甚…

网络1--通信过程的理解

1.封装与解包 通信的过程就是不断的封装和解包的过程 封装即就是按照“应用”“传输” “网络” “链路” 层&#xff0c;封装给每一层都加上相应的包头&#xff08;每一层都有协议&#xff0c;&#xff09;解包就是接受到的包文被一层层去掉相对应的包头。 任何一层的协议都…

JavaScript解决精度问题-math.js-使用入门

JavaScript精度失真案例 0.1+0.2 结果是:0.300000000000000041-0.9 结果是:0.099999999999999984.10*100 结果是:409.999999999999946.10/0.1 结果是:60.99999999999999大数计算 9007199254740992+1 结果是9007199254740992 JavaScript 浮点数运算结果不对,因浮点数的存储…