当前位置: 首页 > news >正文

整数规划——第一章 引言

整数规划——第一章 引言

整数规划是带整数变量的最优化问题,即最大化或最小化一个全部或部分变量为整数的多元函数受约束于一组等式和不等式条件的最优化问题。许多经济、管理、交通、通信和工程中的最优化问题都可以用整数规划来建模。

考虑一个电视机工厂的生产计划问题,如果线性规划模型给出的最优生产计划是每天生产102。4台,则可以选择每天102或103台的生产计划。另一方面,若考虑的问题是仓库的选址问题,设线性规划给出的最优解是在甲地点建或买0。6个仓库,在乙地点建或买0。4个仓库,因仓库的个数必须是整数,这时线性规划的解不能提供任何有用的决策方案。实际上,除了可以描述决策变量的离散性外,整数变量可以帮助我们刻画最优化建模中的许多约束条件,如逻辑关系、固定费用、可选变量的上界、顺序和排序关系、分片线性函数等。

整数规划的历史可以追溯到20世纪50年代,运筹学创始人和线性规划单纯形算法发明者Dantzig首先发现可以用0-1变量来刻画最优化模型中的固定费用、变量上界、非凸分片线性函数等。他和Fulkerson及Johnson对旅行售货员问题(TSP)的研究成为后来的分枝割方法和现代混合整数规划算法的开端。1958年,Gomory发现了第一个一般线性整数规划的收敛算法——割平面方法。随着整数规划理论和算法的发展,整数规划已成为应用最广泛的最优化方法之一,特别是近年来整数规划算法技术和软件系统(如CPLEX)的发展和推广,整数规划在生产企业、服务、运营管理、交通、通信等领域得到了极大的应用和发展。

1.1 分类与建模

1.1.1 线性混合整数规划

线性混合整数规划(Mixed integer program/programming,MIP)的一般形式为:

( MIP ) min ⁡ c T x + h T y , s . t . A x + G y ≤ b , x ∈ Z + n , y ∈ R + p , \begin{aligned} (\text{MIP})\quad\quad& \min \ c^T x+h^Ty,\\\ & s.t.\quad Ax+Gy\le b,\ x\in \Z^n_+,y\in \R^p_+, \end{aligned} (MIP) min cTx+hTy,s.t.Ax+Gyb, xZ+n,yR+p,

其中 Z + n \Z^n_+ Z+n n n n 维非负整数向量集合, R + p \R^p_+ R+p p p p 维非负实数向量集合。

如果问题(MIP)中没有连续决策变量,则(MIP)就是一个(纯)线性整数规划:

( IP ) min ⁡ c T x , s . t . A x ≤ b , x ∈ Z + n , \begin{aligned} (\text{IP})\quad\quad& \min \ c^T x,\\\ & s.t.\quad Ax\le b,\ x\in \Z^n_+, \end{aligned} (IP) min cTx,s.t.Axb, xZ+n,

背包问题 设有一个背包,其承重为 b b b 。考虑n件物品,其中第 j j j 件的重量为 α j α_j αj ,价值为 c j c_j cj。问如何选取物品装入背包,使背包内物品的总价值最大?

x j = { 1 , 若选取第 j 件物品, 0 , 若不选取 . x_j=\begin{cases} 1,&若选取第j件物品,\\ 0,&若不选取. \end{cases} xj={1,0,若选取第j件物品,若不选取.

则背包问题可以表示为下列线性0-1规划:

max ⁡ ∑ j = 1 n c j x j , s . t . ∑ j = 1 n a j x j ≤ b , x ∈ { 0 , 1 } n . \begin{aligned}&\max \sum_{j=1}^n c_jx_j,\\ &s.t.\ \sum_{j=1}^n a_jx_j\le b,\\ &\quad\quad x\in \{0,1\}^n. \end{aligned} maxj=1ncjxj,s.t. j=1najxjb,x{0,1}n.

指派问题 设有 m m m 台机器, n n n 个工件,第 i i i 台机器的可用工时数为 b i b_i bi ,第 i i i 台机器完成第 j j j 件工件需要的工时数为 a i j a_{ij} aij ,费用为 c i j c_{ij} cij 。问如何最优指派机器生产。

x i j = { 1 , 若第  i 个机器加工第  j 件工件, 0 , 其他 . x_{ij}=\begin{cases} 1,&若第\ i\ 个机器加工第\ j\ 件工件,\\ 0,&其他. \end{cases} xij={1,0,若第 i 个机器加工第 j 件工件,其他.

则指派问题可以表示为如下0-1规划问题:

min ⁡ ∑ i = 1 n ∑ j = 1 n c i j x i j , s . t . ∑ j = 1 n a i j x i j ≤ b i , i = 1 , . . . , m , ∑ i = 1 m x i j = 1 , j = 1 , . . . , n , x ∈ { 0 , 1 } n . \begin{aligned}&\min \sum_{i=1}^n\sum_{j=1}^n c_{ij}x_{ij},\\ &s.t.\ \sum_{j=1}^n a_{ij}x_{ij}\le b_i,\ i = 1,...,m,\\ &\quad\quad\sum_{i = 1}^m x_{ij} =1,j=1,...,n, \\ &\quad\quad x\in \{0,1\}^n. \end{aligned} mini=1nj=1ncijxij,s.t. j=1naijxijbi, i=1,...,m,i=1mxij=1,j=1,...,n,x{0,1}n.

集合覆盖问题 设某地区划分为若干个区域,需要建立若干个应急服务中心(如消防站、急救中心等),每个中心的建立都需要一笔建站费用,设候选中心的位置已知,每个中心可以服务的区域预先知道,问如何选取中心使该应急服务能覆盖整个地区且使建站费用最小。

M = { 1 , ⋅ ⋅ ⋅ , m } M=\{1,···,m\} M={1,⋅⋅⋅,m} 为该地区中的区域, N = { 1 , ⋅ ⋅ ⋅ , n } N=\{1,···,n\} N={1,⋅⋅⋅,n} 是可选的中心,设 S ≤ M S≤M SM 为中心 j ∈ N j∈N jN 可以服务的区域集合, c j c_j cj 是中心 j j j 的建站费用,定义0-1关联矩阵 A = ( a i j ) A=(a_{ij}) A=(aij) ,其中如果 i ∈ S j i∈S_j iSj a i j = 1 a_{ij}=1 aij=1 ,否则 a i j = 0 a_{ij}=0 aij=0

x j = { 1 , 若选取中心 j , 0 , 其他 . x_j=\begin{cases} 1,&若选取中心j,\\ 0,&其他. \end{cases} xj={1,0,若选取中心j其他.

则问题可以表述为:

min ⁡ ∑ j = 1 n c j x j , s . t . ∑ j = 1 n a i j x j ≥ 1 , i = 1 , . . . , m , x ∈ { 0 , 1 } n . \begin{aligned}&\min \sum_{j=1}^n c_jx_j,\\ &s.t.\ \sum_{j=1}^n a_{ij}x_j\ge 1,i=1,...,m,\\ &\quad\quad x\in \{0,1\}^n. \end{aligned} minj=1ncjxj,s.t. j=1naijxj1,i=1,...,m,x{0,1}n.

旅行售货员问题(TSP) 设有一个旅行售货员需要去n个城市推销他的产品,他必须而且只能访问每个城市一次,并最后返回出发城市.设每个城市直接到达另一个城市的距离已知(如不能直接到达,则可设其距离为+∞),他应该如何选择旅行路线使得总的旅行距离最短?

设城市 i i i 到城市 j j j 的距离为 c i j c_{ij} cij,设

x i j = { 1 , 若他的旅游路线包括了直接从城市 i 到城市 j 的行程, 0 , 其他 . x_{ij}=\begin{cases} 1,&若他的旅游路线包括了直接从城市 i 到城市 j的行程,\\ 0,&其他. \end{cases} xij={1,0,若他的旅游路线包括了直接从城市i到城市j的行程,其他.

约束条件:

  • 离开城市 i i i 一次:

    ∑ j ≠ i x i j = 1 , i = 1 , . . . , n \sum_{j\not= i}x_{ij}=1,\ i=1,...,n j=ixij=1, i=1,...,n

  • 到达城市 j j j 一次:

    ∑ i ≠ j x i j = 1 , j = 1 , . . . , n \sum_{i\not= j}x_{ij}=1,\ j=1,...,n i=jxij=1, j=1,...,n

  • 上面的约束条件使得每个城市正好经过一次,但仍可能包括含圈但不联通的路
    线,我们需要用下面的约束条件来去除这种情况发生:

    ∑ i ∈ S ∑ j ∉ S x i j ≥ 1 , ∀ S ⊂ N = { 1 , . . . , n } , S ≠ ∅ \sum_{i\in S}\sum_{j\not\in S}x_{ij}\ge 1,\quad \forall S\sub N=\{1,...,n\},S\not =\emptyset iSjSxij1,SN={1,...,n},S=

    或者

    ∑ i ∈ S ∑ j ∈ S x i j ≤ ∣ S ∣ − 1 , ∀ S ⊂ N , 2 ≤ ∣ S ∣ ≤ n − 1 \sum_{i\in S}\sum_{j\in S} x_{ij}\le |S|-1,\quad \forall S\sub N,\quad 2\le|S|\le n-1 iSjSxijS1,SN,2Sn1

从而旅行售货员问题可以表示为:

min ⁡ ∑ i = 1 n ∑ j = 1 n c i j x i j , s . t . ∑ j ≠ i x i j = 1 , i = 1 , . . . , n , ∑ i ≠ j m x i j = 1 , j = 1 , . . . , n , ∑ i ∈ S ∑ j ∈ S x i j ≤ ∣ S ∣ − 1 , ∀ S ⊂ N , 2 ≤ ∣ S ∣ ≤ n − 1 , x ∈ { 0 , 1 } n . \begin{aligned}&\min \sum_{i=1}^n\sum_{j=1}^n c_{ij}x_{ij},\\ &s.t.\ \sum_{j\not=i} x_{ij}=1,\ i = 1,...,n,\\ &\quad\quad\sum_{i \not= j}^m x_{ij} =1,j=1,...,n, \\ &\quad\quad\sum_{i\in S}\sum_{j\in S} x_{ij}\le |S|-1,\quad \forall S\sub N,\quad 2\le|S|\le n-1,\\ &\quad\quad x\in \{0,1\}^n. \end{aligned} mini=1nj=1ncijxij,s.t. j=ixij=1, i=1,...,n,i=jmxij=1,j=1,...,n,iSjSxijS1,SN,2Sn1,x{0,1}n.

1.1.2 非线性整数规划

一般非线性混合整数规划(Mixed-Integer Nonlinear Programming)问题可表示为;

( MINLP ) min ⁡ f ( x , y ) , s . t . g i ( x , y ) ≤ b i , i = 1 , . . . , m , x ∈ X , y ∈ Y \begin{aligned} (\text{MINLP})\quad\quad& \min f(x,y),\\\ & s.t.\quad g_i(x,y)\le b_i,\quad i =1,...,m,\\ &\quad\quad\ \ \ x \in X,\quad y\in Y \end{aligned} (MINLP) minf(x,y),s.t.gi(x,y)bi,i=1,...,m,   xX,yY

此处的 f , g i , i = 1 , . . . , m f,g_i,i=1,...,m f,gi,i=1,...,m R n + q \R^{n+q} Rn+q 上的实值函数, X X X Z n \Z^n Zn 的子集, Y Y Y R q \R^q Rq 的子集。

当(MINLP)中没有连续变量 y y y 时,(MINLP)即是一个(纯)非线性整数规划:

( NLIP ) min ⁡ f ( x , y ) , s . t . g i ( x , y ) ≤ b i , i = 1 , . . . , m , x ∈ X , y ∈ Y \begin{aligned} (\text{NLIP})\quad\quad& \min f(x,y),\\\ & s.t.\quad g_i(x,y)\le b_i,\quad i =1,...,m,\\ &\quad\quad\ \ \ x \in X,\quad y\in Y \end{aligned} (NLIP) minf(x,y),s.t.gi(x,y)bi,i=1,...,m,   xX,yY

最大割问题 G = ( V , E ) G=(V,E) G=(V,E) 是有 n n n 个顶点的无向图,设边 ( i , j ) (i,j) (i,j) 上的权为 w i j ( w i j = w j i ≥ 0 ) w_{ij}(w_{ij}=w_{ji}\ge 0) wij(wij=wji0)。图 G G G 的一个割 ( S , S ′ ) (S,S') (S,S) 是指 n n n 个顶点上的一个分割: S ∩ S ′ = ∅ , S ∪ S ′ = V S\cap S'=\empty,S\cup S'=V SS=,SS=V。最大割问题是求一个分割 ( S , S ′ ) (S,S') (S,S) 使连接 S S S S ′ S' S 之间的所有边上的权最大。

设 $x_i = 1\ \text{if} \ \ i\in S,\ x_i = -1 \ \text{if} \ \ i\in S’ $,则分割 ( S , S ′ ) (S,S') (S,S) 上的权为:

1 2 ( 1 2 ∑ i , j = 1 n w i j − 1 2 ∑ i , j = 1 n w i j x i x j ) = 1 4 ∑ i , j = 1 n w i j ( 1 − x i x j ) . \frac{1}{2}(\frac{1}{2}\sum_{i,j=1}^n w_{ij}-\frac{1}{2}\sum_{i,j=1}^n w_{ij} x_ix_j)=\frac{1}{4}\sum_{i,j=1}^n w_{ij}(1-x_ix_j). 21(21i,j=1nwij21i,j=1nwijxixj)=41i,j=1nwij(1xixj).
所以最大割问题可以表示为:
max ⁡ 1 4 ∑ i , j = 1 n w i j ( 1 − x i x j ) , s . t . x ∈ { − 1 , 1 } n . \begin{aligned} &\max\ \frac{1}{4}\sum_{i,j=1}^n w_{ij}(1-x_ix_j),\\ & s.t.\ x\in \{-1,1\}^n. \end{aligned} max 41i,j=1nwij(1xixj),s.t. x{1,1}n.
最大割问题是组合优化中著名的NP难问题,l995年,Goemans和Williamson对
最大割问题的SDP松弛给出了一个漂亮的结果:
f o p t ≤ f S D P ≤ α f o p t , α = 1.138 ⋅ ⋅ ⋅ , f_{opt}≤f_{SDP}≤\alpha f_{opt},\alpha=1.138···, foptfSDPαfopt,α=1.138⋅⋅⋅,
这里 f o p t f_{opt} fopt 是最大割问题的最优值, f S D P f_{SDP} fSDP是SDP松弛问题的最优值

可靠性网络 考虑有 n n n 个子系统的网络.设 r i ( 0 < r i < 1 ) r_i(0<r_i<1) ri(0<ri<1) 是第 i i i 个子系统中的部件可靠性, x i x_i xi 表示第 i i i 个子系统的冗余部件的个数。网络可靠性优化问题是求最优的冗余向量 x = ( x 1 , ⋅ ⋅ ⋅ , x n ) T x=(x_1,···,x_n)^T x=(x1,⋅⋅⋅,xn)T 使网络的整体可靠性最大。

i i i 个子系统的可靠性为
R i ( x i ) = 1 − ( 1 − r i ) x i , i = 1 , . . . , n R_i(x_i)=1-(1-r_i)^{x_i},\ i=1,...,n Ri(xi)=1(1ri)xi, i=1,...,n
整个网络的可靠性 R s ( x ) R_s(x) Rs(x) 是关于 R 1 ( x 1 ) , . . . , R n ( x n ) R_1(x_1),...,R_n(x_n) R1(x1),...,Rn(xn) 的增函数,下图所示的网络的可靠性为

R s = R 6 R 7 + R 1 R 2 R 3 ( Q 6 + R 6 Q 7 ) + R 1 R 4 R 7 Q 6 ( Q 2 + R 2 Q 3 ) R_s = R_6R_7+R_1R_2R_3(Q_6+R_6Q_7)+R_1R_4R_7Q_6(Q_2+R_2Q_3) Rs=R6R7+R1R2R3(Q6+R6Q7)+R1R4R7Q6(Q2+R2Q3)
其中 Q i = 1 − R i , i = 1 , . . . , n Q_i = 1-R_i,i=1,...,n Qi=1Rii=1,...,n,对应的最优冗余问题为:

max ⁡ R s ( x ) = f ( R 1 ( x 1 ) , . . . , R n ( x n ) ) , s . t . g i ( x ) = ∑ j = 1 n g i j ( x j ) ≤ b i , i = 1 , . . . , m , x ∈ X = { x ∈ Z n ∣ 1 ≤ l j ≤ x j ≤ u j , j = 1 , . . . , n } \begin{aligned} &\max\ R_s(x)=f(R_1(x_1),...,R_n(x_n)),\\ & s.t.\ g_i(x)=\sum_{j=1}^ng_{ij}(x_j)\le b_i,\quad i=1,...,m,\\ &\quad\quad x\in X=\{x\in \Z^n|1\le l_j\le x_j\le u_j,j=1,...,n\} \end{aligned} max Rs(x)=f(R1(x1),...,Rn(xn)),s.t. gi(x)=j=1ngij(xj)bi,i=1,...,m,xX={xZn∣1ljxjuj,j=1,...,n}
其中 g i ( x ) , i = 1 , . . . , m g_i(x),i=1,...,m gi(x),i=1,...,m 代表不同的资源消耗函数,例如费用、体积、重量等。

1.2 问题的挑战性

很多整数规划问题往往看上去很简单,数学模型也不复杂,如0-1背包问题、最大割问题等,但求解这类问题其实非常困难.绝大部分整数规划问题的可行域都只有有限多个可行点(决策方案),一个简单幼稚的想法是枚举所有的可行点,但是这样会使求解难度指数增加。大部分整数规划问题的困难在于:我们本质上只能使用枚举法或隐枚举法的思想来求解问题最优解,故当问题的规模越来越大时,算法的计算时间急剧增加。与此形成对照的是连续优化问题,我们知道,最简单的连续优化问题的可行点的个数也是无穷多个,但寻找可行域中的最优点并不需要借助枚举法的思想,因为利用微积分的工具可以刻画出最优点需要满足的一组容易验证的最优性条件,如KKT条件。故只有当算法需要枚举或部分枚举这些可行点时,可行域中可行点的个数才和问题的难度有关。

另外一个朴素的想法是“四舍五入”:求解相应的连续优化问题(丢掉整数约束),然后对求得的解进行四舍五入,得到一个整数解.这个方法有两个问题:(1)一般很难通过四舍五入得到一个满足约束条件的可行解;(2)即使能求得一个可行解,其质量往往很差,即可能离最优解的距离很远,甚至和随机产生的可行解差不多。贪心算法往往可以帮助我们求到一个问题的近似解。例如,在0-1背包问题中,可以先进行排序:
c j 1 a j 1 ≥ c j 2 a j 2 ≥ . . . ≥ c j n a j n \frac{c_{j1}}{a_{j1}}\ge\frac{c_{j2}}{a_{j2}}\ge ... \ge\frac{c_{jn}}{a_{jn}} aj1cj1aj2cj2...ajncjn
然后按照从大到小的顺序 j 1 , . . . , j n j_1,...,j_n j1,...,jn 选取物品知道背包的容量 b b b 不能再装下一个物品。

在实际应用中提出的很多整数规划问题的规模一般都很大,直接利用现有的算法和软件求解往往是不可能的.这就促使人们研究有效快速的近似算法或启发式算法以寻找问题的一个近似最优解或较好的可行解,如近年来发展起来的基于半定规划的随机化算法和各种针对具体整数规划和组合优化问题的近似算法。

参考资料

  1. 整数规划 孙小玲,李瑞 北京,科学出版社 2010
  2. Wolsey L A. Integer programming[M]. John Wiley & Sons, 2020.

相关文章:

整数规划——第一章 引言

整数规划——第一章 引言 整数规划是带整数变量的最优化问题&#xff0c;即最大化或最小化一个全部或部分变量为整数的多元函数受约束于一组等式和不等式条件的最优化问题。许多经济、管理、交通、通信和工程中的最优化问题都可以用整数规划来建模。 考虑一个电视机工厂的生产…...

C语言结构体讲解

目录 结构体的声明 结构的基础知识 结构的声明 为什么要出现结构体&#xff1f; 结构成员的类型 结构体变量的定义和初始化 定义&#xff1a;&#xff08;全局变量//局部变量&#xff09; 初始化&#xff1a; 结构体成员的访问 结构体传参 结构体的声明 结构的基础知识…...

021 - STM32学习笔记 - Fatfs文件系统(三) - 细化与总结

021 - STM32学习笔记 - Fatfs文件系统&#xff08;三&#xff09; - 细化与总结 上节内容中&#xff0c;初步实现了FatFs文件系统的移植&#xff0c;并且实现了设备的挂载、文件打开/关闭与读写功能&#xff0c;这里对上节遗留的一些问题进行总结&#xff0c;并且继续完善文件…...

jQuery如何获取动态添加的元素

jQuery如何获取动态添加的元素 使用 on()方法 本质上使用了事件委派&#xff0c;将事件委派在父元素身上 自 jQuery 版本 1.7 起&#xff0c;on() 方法是 bind()、live() 和 delegate() 方法的新的替代品&#xff0c;但是由于on()方法必须有事件&#xff0c;没有事件时可选择de…...

Keepalived 在CentOS 7安装并配置监听MySQL双主

keepalived安装 MySQL双主配置请看这里&#xff1a;https://tongyao.blog.csdn.net/article/details/132016200?spm1001.2014.3001.5502 128、129两台服务器安装步骤相同&#xff0c;配置文件不同&#xff0c;下面有介绍。 1.安装相关依赖包&#xff0c;并下载keepalived安…...

深度学习,神经网络介绍

目录 1.神经网络的整体构架 2.神经网络架构细节 3.正则化与激活函数 4.神经网络过拟合解决方法 1.神经网络的整体构架 ConvNetJS demo: Classify toy 2D data 我们可以看看这个神经网络的网站&#xff0c;可以用来学习。 神经网络的整体构架如下1&#xff1a; 感知器&…...

中国AI大模型峰会“封神之作”!开发者不容错过这场夏季盛会

年度最强大模型顶会来袭&#xff01;喊话中国数百万AI开发者&#xff0c;速来&#xff01; 硬核来袭&#xff01;中国AI大模型峰会“封神之作”&#xff0c;开发者们不容错过! 前瞻大模型发展趋势&#xff0c;紧跟这场大会&#xff01; 中国科技超级碗&#xff0c;大模型最新前…...

Android Studio多渠道打包

使用环境&#xff1a; Android studio 多渠道打包 使用方法&#xff1a; 1 APP下build.gradle文件 flavorDimensions "default"productFlavors {huawei {dimension "default"manifestPlaceholders [ channel:"huawei" ]}xiaomi {dimension &…...

RK3566 Android11默认客户Launcher修改

前言 客户需要默认自己的Launcher为home,同时保留系统的Launcher3. 解决办法:在启动home应用之前设置一下默认Launcher。查找home app启动相关资料,找到了frameworks/base/services/core/java/com/android/server/wm/RootWindowContainer.java的startHomeOnTaskDisplayA…...

ORB算法在opencv中实现方法

在OPenCV中实现ORB算法&#xff0c;使用的是&#xff1a; 1.实例化ORB orb cv.xfeatures2d.orb_create(nfeatures)参数&#xff1a; nfeatures: 特征点的最大数量 2.利用orb.detectAndCompute()检测关键点并计算 kp,des orb.detectAndCompute(gray,None)参数&#xff1a…...

vue项目回显文本无法识别换行符

解决方法 1&#xff1a;使用<br/>替换文本中的\n&#xff0c;使用v-html渲染 <template> <div v-html"str"></div> </template> <script> let str 以下内容自动换行\n换行了 // 使用replace截取提换 this.str str.replace(/…...

Minio 部署

minio 官网&#xff1a;https://www.minio.org.cn/ 部署文档&#xff1a;https://www.minio.org.cn/docs/minio/container/operations/install-deploy-manage/deploy-minio-single-node-single-drive.html# 选择自己的部署环境&#xff1a; 我用的docker: docker pull qua…...

Kafka系列之:记录一次Kafka Topic分区扩容,但是下游flink消费者没有自动消费新的分区的解决方法

Kafka系列之:记录一次Kafka Topic分区扩容,但是下游flink消费者没有自动消费新的分区的解决方法 一、背景二、解决方法三、实现自动发现新的分区一、背景 生产环境Kafka集群压力大,Topic读写压力大,消费的lag比较大,因此通过扩容Topic的分区,增大Topic的读写性能理论上下…...

Ansible部署MariaDB galera集群(多主)

文章目录 Ansible部署MariaDB galera集群(多主)介绍节点规划基础环境准备编写剧本文件执行剧本文件查看集群状态测试 Ansible部署MariaDB galera集群(多主) 介绍 MariaDB Galera集群是一套基于同步复制的、多主的MySQL集群解决方案&#xff0c;使用节点没有单点故障&#xff…...

立体库-库龄

split 用法第一种&#xff1a; 1.对单个字符进行分割&#xff08;注意这里是字符&#xff0c;不是字符串&#xff0c;故只能用单引号‘’&#xff09; string sabcdeabcdeabcde; string[] sArrays.Split(c) ; foreach(string i in sArray) Console.WriteLine(i.ToString());…...

extern/头文件包含,实现一个函数被两个文件共用

目录 一、extern 1、在a.c文件中定义int add函数 2、在b.c文件中使用extern关键字声明add函数 二、用头文件包含的形式 1、在a.c文件中定义int add函数 2、创建一个名为a.h的头文件&#xff0c;其中包含add函数的函数原型 3、在b.c文件中包含a.c的头文件&#xff0c;并调…...

pgsql 查看某个表建立了那些索引sql

执行以下sql&#xff1a; SELECTns.nspname as schema_name,tab.relname as table_name,cls.relname as index_name,am.amname as index_type,idx.indisprimary as is_primary,idx.indisunique as is_unique FROMpg_index idx INNER JOIN pg_class cls ON cls.oididx.indexrel…...

【SCSS】网格布局中的动画

效果 index.html <!DOCTYPE html> <html><head><title> Document </title><link type"text/css" rel"styleSheet" href"index.css" /></head><body><div class"container">&l…...

Docker基础命令(一)

Docker使用1 一、运行终端 打开终端&#xff0c;输入docker images &#xff0c;如果运行正常&#xff0c;表示docker已经可以在本电脑上使用了 二、docker常用命令 指令说明docker images查看已下载的镜像docker rmi 镜像名称:标签名删除已下载的镜像docker search 镜像从官…...

django4.2 day1Django快速入门

1、创建虚拟环境 打开cmd安装virtualenv pip install virtualenvwrapper-winworkon 查看虚拟环境mkvirtualenv 创建新的虚拟环境删除虚拟环境 rmvirtualenv 进入虚拟环境 workon env 2、创建django虚拟环境并安装django 创建虚拟环境mkvirtualenv django4env进入虚拟环境安…...

linux的exec和system函数介绍及选择

在应用程序中有时候需要调用第三方的应用&#xff0c;这是常见的需求。此时可以使用linux下的exec命令或system命令达到目的。但是这两个该选择哪个呢&#xff1f;有什么区别&#xff1f;下面总结介绍下。 exec和system介绍 在Linux中&#xff0c;exec命令用于在当前进程中执行…...

150行代码写一个Qt井字棋游戏

照例先演示一下: QT井字棋游戏&#xff0c;可以悔棋。 会在鼠标箭头处跟随一个下棋方的小棋子图标。 棋盘和棋子是自己画的&#xff0c;可以自行在对应的代码处更换自己喜欢的图片&#xff0c;不过要注意尺寸兼容。 以棋会友&#xff1a; 井字棋最关键的就是下棋了&#xf…...

k8s概念-controller

Controller作用和分类 controller用于控制pod 参考: 工作负载资源 | Kubernetes 控制器主要分为: Deployments 部署无状态应用&#xff0c;控制pod升级,回退 ReplicaSet 副本集,控制pod扩容,裁减 ReplicationController(相当于ReplicaSet的老版本,现在建议使用Deployments…...

Gis入门,根据起止点和一个控制点计算二阶贝塞尔曲线(共三个控制点组成的线段转曲线)

前言 本章讲解如何在gis地图中使用起止点和一个控制点(总共三个控制点)生成二阶贝塞尔曲线。 三阶贝塞尔曲线请参考下一章《Gis入门,使用起止点和两个控制点生成三阶贝塞尔曲线(共四个控制点)》 贝塞尔曲线(Bezier curve)介绍 贝塞尔曲线(Bezier curve)是一种数学…...

第1集丨Vue 江湖 —— Hello Vue

目录 一、简介1.1 参考网址1.2 下载 二、Hello Vue2.1 创建页面2.2 安装Live Server插件2.4 安装 vue-devtools2.5 预览效果 一、简介 Vue&#xff08;读音 /vjuː/, 类似于 view&#xff09; 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是&#xff0c;Vue 被设…...

PCB制版技术

1、在头脑里形成一个原理图----现在就下载AD9盖版&#xff0c;诞生了一个问题&#xff0c;电路板去哪里买&#xff0c;买了怎么焊接电路和芯片&#xff0c;怎样流程化批量制作电子产品 1.1 形成一个PCB板&#xff0c;形成一个结构 1.2 焊接&#xff0c;嫁接&#xff0c;组装等 …...

大数据课程E7——Flume的Interceptor

文章作者邮箱&#xff1a;yugongshiyesina.cn 地址&#xff1a;广东惠州 ▲ 本章节目的 ⚪ 了解Interceptor的概念和配置参数&#xff1b; ⚪ 掌握Interceptor的使用方法&#xff1b; ⚪ 掌握Interceptor的Host Interceptor&#xff1b; ⚪ 掌握Interceptor的…...

P2P网络NAT穿透原理(打洞方案)

1.关于NAT NAT技术&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09;是一种把内部网络&#xff08;简称为内网&#xff09;私有IP地址转换为外部网络&#xff08;简称为外网&#xff09;公共IP地址的技术&#xff0c;它使得一定范围内的多台主机只…...

Gof23设计模式之桥接外观模式

1.概述 又名门面模式&#xff0c;是一种通过为多个复杂的子系统提供一个一致的接口&#xff0c;而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口&#xff0c;外部应用程序不用关心内部子系统的具体的细节&#xff0c;这样会大大降低应用程序的复杂度&#xff0…...

微服务性能分析工具 Pyroscope 初体验

Go 自带接口性能分析工具 pprof&#xff0c;较为常用的有以下 4 种分析&#xff1a; CPU Profiling: CPU 分析&#xff0c;按照一定的频率采集所监听的应用程序 CPU&#xff08;含寄存器&#xff09;的使用情况&#xff0c;可确定应用程序在主动消耗 CPU 周期时花费时间的位置…...