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

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 big
    if(3+0.5*k > max_size)return ; // can't chose
    int 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 small
    if(3+0.5*k < min_size)return ; // can't chose
    int 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.5
    min_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 big
    if(3+0.5*k > max_size)return ; // can't chose
    int 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 small
    if(3+0.5*k < min_size)return ; // can't chose
    int 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.5
    min_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 chose
    int 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/:f
  gg(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.0000
  Objective bound:                              137.0000
 U( 30)        1.000000            0.000000

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

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


  Objective value:                              37.00000
  Objective bound:                              37.00000

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

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

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

单独解决成品一:

  Global optimal solution found.
  Objective value:                              14.00000
  Objective bound:                              14.00000
  Infeasibilities:                              0.000000
  Extended solver steps:                               0
  Total solver iterations:                          8821


                       Variable           Value        Reduced Cost
                          U( 2)        5.000000            0.000000
                          U( 4)        6.000000            0.000000
                          U( 5)        1.000000            0.000000
                          U( 6)        3.000000            0.000000
                          U( 9)        23.00000            0.000000
                         U( 10)        23.00000            0.000000
                         U( 11)        7.000000            0.000000
                         U( 12)        1.000000            0.000000
                         U( 14)        2.000000            0.000000
                         U( 15)        2.000000            0.000000
                         U( 17)        1.000000            0.000000

局部最优解

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

每日OJ题_DFS解决FloodFill⑤_力扣417. 太平洋大西洋水流问题

目录 力扣417. 太平洋大西洋水流问题 解析代码 力扣417. 太平洋大西洋水流问题 417. 太平洋大西洋水流问题 难度 中等 有一个 m n 的矩形岛屿&#xff0c;与 太平洋 和 大西洋 相邻。 “太平洋” 处于大陆的左边界和上边界&#xff0c;而 “大西洋” 处于大陆的右边界和下…

自动控制原理MATLAB:控制系统模型构建

在MATLAB中&#xff0c;常用的系统建模方法有传递函数模型、零极点模型以及状态空间模型等。 1系统传递函数模型描述&#xff1a; 命令格式&#xff1a; systf(num,den,Ts); 其中&#xff0c;num、den为分子多项式降幂排列的系数向量,Ts表示采样时间&#xff0c;缺省时描述…

AI 数据观 | TapData Cloud + MongoDB Atlas:大模型与 RAG 技术有机结合,落地实时工单处理智能化解决方案

本篇为「AI 数据观」系列文章第二弹&#xff0c;在这里&#xff0c;我们将进一步探讨 AI 行业的数据价值。以 RAG 的智能工单应用场景为例&#xff0c;共同探索如何使用 Tapdata Cloud MongoDB Atlas 实现具备实时更新能力的向量数据库&#xff0c;为企业工单处理的智能化和自…

在小黑框如何用Python写出多行代码

平时使用python自带的小黑框编译器只能一行代码一行代码的写&#xff0c; 方法一 可以新建一个文本txt格式&#xff0c;然后打开在里面输入你想要的Python代码&#xff0c;然后把名字改成xxx.py&#xff0c;然后点击小黑框&#xff0c;输入 python 把Py文件拖过来回车就行 方…

Hive内部表、外部表

Hive内部表、外部表 1. 内部表&#xff08;Managed Table&#xff09;&#xff1a; 内部表是由Hive完全管理的表&#xff0c;包括数据和元数据。当你删除内部表时&#xff0c;Hive会同时删除表的数据和元数据。内部表的数据存储在Hive指定的默认位置&#xff08;通常是HDFS上…

VBA 创建透视表,录制宏,自动化报表

目录 一. 数据准备二. 需求三. 准备好报表模板四. 执行统计操作&#xff0c;录制宏4.1 根据数据源创建透视表4.2 填充数据到报表4.3 结束宏录制 五. 执行录制好的宏&#xff0c;自动化报表 一. 数据准备 ⏹数据源1 姓名学科成绩丁志敏语文91李平平语文81王刚语文64张伊语文50…

【前端】HTML基础(1)

文章目录 前言一、什么是前端二、HTML基础1、 HTML结构1.1 什么是HTML页面1.2 认识HTML标签1.3 HTML文件基本结构1.3 标签层次结构1.4 创建html文件1.5 快速生成代码框架 三、Emmet快捷键 前言 这篇博客仅仅是对HTML的基本结构进行了一些说明&#xff0c;关于HTML的更多讲解以及…

新能源电燃灶:为人类社会贡献高品质的健康生活

华火新能源电燃灶&#xff0c;作为一种创新的厨房设备&#xff0c;近年来逐渐走进了千家万户&#xff0c;成为了现代家庭厨房的新宠。它不仅改变了传统的烹饪方式&#xff0c;更在环保、节能、安全等方面为人类带来了诸多贡献。本文将从多个方面探讨华火新能源电燃灶对人类的贡…

知行之桥EDI系统跨平台版本安装报错及解决方案

本文将为大家介绍如何在Windows系统中安装知行之桥EDI系统跨平台版本的常见报错以及解决方案。如下图所示&#xff1a; 在知行软件官网的导航栏中点击 下载 按钮&#xff0c;即可看到知行之桥EDI系统不同版本的下载选项&#xff0c;点击右侧跨平台版本&#xff0c;选择 Windows…

移动硬盘无法被识别怎么办?恢复移动硬盘3个正确做法

移动硬盘已成为我们日常生活和工作中不可或缺的数据存储设备。然而当移动硬盘突然无法被电脑识别时&#xff0c;往往会让人倍感焦虑。面对这种情况我们不必过于慌张&#xff0c;下面一起来看看指南解决。 解决方法一&#xff1a;检查硬件连接与供电 检查接口连接&#xff1a…

uniapp离线在Xcode上打包后提交审核时提示NSUserTrackingUsageDescription的解决方法

uniapp离线在Xcode上打包后提交审核时提示NSUserTrackingUsageDescription的解决方法 问题截图&#xff1a; 亲测有效的方法 方法一&#xff1a; 选择通过uniapp的开发工具Hbuilder来进行在线打包&#xff0c;取消默认勾选的以下选项。 然后进行在线打包就不会存在提交审…

山东省文史书画研究会成立20周年系列活动徽标征集胜选名单公布

2024年5月1日&#xff0c;山东省文史书画研究会成立20周年系列活动徽标征集落下帷幕。征稿启事下发后&#xff0c;得到社会各界人士的广泛关注与参与&#xff0c;共收到设计方案608件。经过初评&#xff0c;选出5幅作品进入复评&#xff0c;并经过网络投票和专家投票相结合的方…

linux——主从同步

1. 保证主节点开始二进制日志&#xff0c;从节点配置中继日志 2. 从节点的开启一个 I/O 线程读取主节点二进制日志的内容 3. 从节点读取主节点的二进制日志之后&#xff0c;会将去读的内容写入从节点的中继日志 4. 从节点开启 SQL 线程&#xff0c;读取中继日志的内容&a…

《软件方法(下)》8.3 建模步骤C-2 识别类的关系(202405更新)

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 8.3 建模步骤C-2 识别类的关系 首先重复本章开头所提到的&#xff1a; 虽然本书先讲解“识别类和属性”&#xff0c;再讲解“识别类的关系”&#xff0c;但在实际工作中&#xff0c;…

数据库管理-第184期 23ai:干掉MongoDB的不一定是另一个JSON数据库(20240507)

数据库管理184期 2024-05-07 数据库管理-第184期 23ai:干掉MongoDB的不一定是另一个JSON数据库&#xff08;20240507&#xff09;1 JSON需求2 关系型表设计3 JSON关系型二元性视图3 查询视图总结 数据库管理-第184期 23ai:干掉MongoDB的不一定是另一个JSON数据库&#xff08;20…

9.4k Star!MemGPT:伯克利大学最新开源、将LLM作为操作系统、无限上下文记忆、服务化部署自定义Agent

9.4k Star&#xff01;MemGPT&#xff1a;伯克利大学最新开源、将LLM作为操作系统、无限上下文记忆、服务化部署自定义Agent 原创 Aitrainee | 公众号&#xff1a;AI进修生&#xff1a;AI算法工程师 / Prompt工程师 / ROS机器人开发者 | 分享AI动态与算法应用资讯&#xff0c;提…

人脸采集训练识别

项目概述&#xff1a; 本地摄像头采集人脸数据集&#xff0c;通过训练得到trainingData.yml模型&#xff0c;加载haarcascade_frontalface_default.xml实现人脸识别。haarcascade_frontalface_default.xml 文件并不是一个完整的人脸识别模型&#xff0c;而是一个用于检测正脸&a…

Conda安装rasterio报错

Conda安装rasterio报错 文章目录 Conda安装rasterio报错问题解决参考 问题 在conda环境中安装rasterio包之后&#xff0c;本来可以正常运行的&#xff0c;但是之后又重新安装了一个gdal&#xff0c;导致原来的引用rasterio的包的程序不可正常运行了 conda install rasterio c…

流畅的python-学习笔记_序列

概念 抽象基类&#xff1a;ABC, Abstract Base Class&#xff0c;ABC还有一个概念&#xff0c;是一个编程语言 序列 内置序列类型 分类 可分为容器类型和扁平类型 容器类型有list&#xff0c; tuple&#xff0c; collections.deque等&#xff0c;存储元素类型可不同&…

分布式架构|打造高效、稳定、灵活的现代IT基石

分布式架构&#xff1a;打造高效、稳定、灵活的现代IT基石 一、独立扩展&#xff1a;应对业务增长与用户激增二、高可用性&#xff1a;确保系统稳定运行三、可维护性&#xff1a;降低系统复杂性四、技术选型灵活性&#xff1a;充分利用各种技术优势五、数据隔离与安全性 随着信…