数学建模1·线性规划

线性规划的标准形式
min ⁡ x c T x    s.t.  { A x ≤ b A e q ⋅ x = b e q l b ≤ x ≤ u b \min _{x} c^{T} x\\ \ \\ \text { s.t. }\left\{\begin{array}{l} A x \leq b \\ A e q \cdot x=b e q \\ l b \leq x \leq u b \end{array}\right. xmincTx  s.t. AxbAeqx=beqlbxub

其中c和x为n维列向量,A、Aeq为适当维数的矩阵,b、beq为适当维数的列向量

MATLAB中求解线性规划的命令为

[x,fval]=linprog(c,A,b)
[x,fval]=linprog(c,A,b,Aeq,beq)
[x,fval]=linprog(c,A,b,Aeq,beq,lb,ub)
  • 其中x返回的是决策向量的取值,
  • fval返回的是目标函数的最优值,
  • c为价值向量,
  • a、b对应的是线性不等式约束,
  • aeq、beq对应的是线性等式约束,
  • lb和ub分别对应的是决策向量的下界向量和上界向量

python scipy库求解

from scipy import optimize 
import numpy as np 
#求解函数 
res = optimize.linprog(c,A,b,Aeq,beq,LB,UB,X0,OPTI ONS) 
#目标函数最小值 
print(res.fun) 
#最优解 
print(res.x)

python pulp库求解

例1.求解
max ⁡ z = 2 x 1 + 3 x 2 − 5 x 3  s.t.  x 1 + x 2 + x 3 = 7 2 x 1 − 5 x 2 + x 3 ≥ 10 x 1 + 3 x 2 + x 3 ≤ 12 x 1 , x 2 , x 3 ≥ 0 \begin{array}{ll} \max z=2 x_{1}+3 x_{2}-5 x_{3} \\ \text { s.t. } \quad x_{1}+x_{2}+x_{3}=7 \\ 2 x_{1}-5 x_{2}+x_{3} \geq 10 \\ x_{1}+3 x_{2}+x_{3} \leq 12 \\ x_{1}, x_{2}, x_{3} \geq 0 \end{array} maxz=2x1+3x25x3 s.t. x1+x2+x3=72x15x2+x310x1+3x2+x312x1,x2,x30

%注意这里求的是最大值,想把最大变成最小有三处需要添负号
f=[-2-35];
a=[-2,5,-1;1,3,1];b=[-10;12];
aeq=[1,1,1];
beq=7;
[x,y]=linprog(f,a,b,aeq,beq,zeros(3,1));
x,y=-y
#导入包
from scipy import optimize
import numpy as np
#确定c,A,b,Aeq,beq 
c = np.array([2,3,-5]) 
A = np.array([[-2,5,-1],[1,3,1]]) 
B = np.array([-10,12]) 
Aeq = np.array([[1,1,1]]) 
Beq = np.array([7]) 
#求解 
res = optimize.linprog(-c,A,b,Aeq,beq) 
print(res) 

max ⁡ z = 2 x 1 + 3 x 2 + x 3  s.t.  x 1 + 2 x 2 + 4 x 3 = 101 x 1 + 4 x 2 + 2 x 3 ≥ 8 3 x 1 + 2 x 2 ≥ 6 x 1 , x 2 , x 3 ≥ 0 \begin{array}{ll} \max z=2 x_{1}+3 x_{2}+x_{3} \\ \text { s.t. } \quad x_{1}+2x_{2}+4x_{3}=101 \\ x_{1}+4x_{2}+2x_{3} \geq 8 \\ 3x_{1}+2x_{2} \geq 6 \\ x_{1}, x_{2}, x_{3} \geq 0 \end{array} maxz=2x1+3x2+x3 s.t. x1+2x2+4x3=101x1+4x2+2x383x1+2x26x1,x2,x30

import pulp
#目标函数系数
z = [2,3,1]
#约束 
a = [[1,4,2],[3,2,0]] 
b = [8, 6] 
#确定最大化最小化问题,最大化只要把Min改成Max即可 
m = pulp.LpProblem(sense=pulp.LpMinimize) 
#定义三个变量放到列表中 
x = [pulp.LpVariable(f’x{i}, lowBound=0) for i in [1,2,3]] 
#定义目标函数,lpDot可以将两个列表(必须是1维的!)的对应位相乘再加和 
#相当于z[0]*x[0]+z[1]*x[1]+z[2]*x[2] 
m += pulp.lpDot(z, x)
#设置约束条件 
for i in range(len(a)): 
	m += (pulp.lpDot(a[i], x) >= b[i]) 
#求解 
m.solve() 
#输出结果 
print(f’优化结果:{pulp.value(m.objective)})#目标值 
print(f’参数取值:{[pulp.value(var) for var in x]})#最优解

非线性的可以转化为线性的规划问题
例2.
min ⁡ ∣ x 1 ∣ + ∣ x 2 ∣ + ⋯ + ∣ x n ∣  s.t.  A x ≤ b \begin{array}{l} \min \left|x_{1}\right|+\left|x_{2}\right|+\cdots+\left|x_{n}\right| \\ \text { s.t. } \quad A x \leq b \end{array} minx1+x2++xn s.t. Axb

其中 x = [ x 1 ⋯ x n ] T x=\left[\begin{array}{lll} x_{1} & \cdots & x_{n} \end{array}\right]^{T} x=[x1xn]T,A和b为相应维数的矩阵和向量
转化:对任意的 x i x_{i} xi,存在 x i , v i > 0 x_{i},v_{i}>0 xi,vi>0满足
x i = u i − v i , ∣ x i ∣ = u i + v i x_{i}=u_{i}-v_{i}, \quad\left|x_{i}\right|=u_{i}+v_{i} xi=uivi,xi=ui+vi
u = [ u 1 ⋯ u n ] T , v = [ v 1 ⋯ v n ] T u=\left[\begin{array}{lllll} u_{1} & \cdots & u_{n} \end{array}\right]^{T}, \quad v=\left[\begin{array}{lll} v_{1} & \cdots & v_{n} \end{array}\right]^{T} u=[u1un]T,v=[v1vn]T

上面问题变成:
min ⁡ ∑ i = 1 n ( u i + v i )  s.t.  { A ( u − v ) ≤ b u , v ≥ 0 \begin{array}{l} \min \sum_{i=1}^{n}\left(u_{i}+v_{i}\right) \\ \text { s.t. }\left\{\begin{array}{l} A(u-v) \leq b \\ u, v \geq 0 \end{array}\right. \end{array} mini=1n(ui+vi) s.t. {A(uv)bu,v0

案例1——投资的收益和风险

1.1问题提出

市场上有n种资产 S i ( i = 1 , 2 , L , n ) S_{i}(i=1,2,L,n) Si(i=1,2,L,n)可以选择,现用数额为M的相当大的资金作为一个时期的投资。
这n种资产在这一时期内购买 S i S_{i} Si的平均收益率为 r i r_{i} ri,风险损失率为 q i q_{i} qi,投资越分散,总的风险越少,总体风险可用投资的 S i S_{i} Si中最大的一个风险来度量。
购买 S i S_{i} Si时要付交易费,费率为 p i p_{i} pi,当购买额不超过给定值 u i u_{i} ui时,交易费按购买 u i u_{i} ui计算。
另外,假定同期银行存款利率是 r 0 r_{0} r0,既无交易费又无风险( r 0 = 5 r_{0}=5% r0=5)
已知 n = 4 n=4 n=4时相关数据如表

S i S_{i} Si r i ( % ) r_{i}(\%) ri(%) q i ( % ) q_{i}(\%) qi(%) p i ( % ) p_{i}(\%) pi(%) u i ( 元 ) u_{i}(元) ui()
S 1 S_{1} S1282.51103
S 2 S_{2} S2211.52198
S 3 S_{3} S3235.54.552
S 4 S_{4} S4252.66.540

试给该公司设计一种投资组合方案,即用给定资金M,有选择性地购买若干种资产或存银行生息,使净收益尽可能大,使总体风险尽可能小。

1.2符号规定和基本假设

符号含义
S i S_{i} Si表示第i种投资项目,其中 S 0 S_{0} S0指存入银行
r i , p i , q i r_{i},p_{i},q_{i} ri,pi,qi分别表示平均收益率,交易费率,风险损失率,其中 p 0 = 0 , q 0 = 0 p_{0}=0,q_{0}=0 p0=0,q0=0
u i u_{i} ui表示 s i s_{i} si的交易定额
x i x_{i} xi表示投资项目 s i s_{i} si的资金
a a a表示投资风险度
Q Q Q表示总体收益

基本假设

  1. 投资数额M相当大,为了便于计算,假设M=1;、
  2. 投资越分散,总的风险越小;
  3. 总体风险用投资项目 s i s_{i} si中最大的一个风险来度量;
  4. n+1中资产 s i s_{i} si之间是相互独立的;
  5. 在投资的这一时期内, r i , p i , q i r_{i},p_{i},q_{i} ri,pi,qi为定值,不受意外因素影响;
  6. 净收益和总体风险只受 r i , p i , q i r_{i},p_{i},q_{i} ri,pi,qi影响,不受其它因素干扰。

1.3模型的分析与建立

  1. 总体风险用所投资的 s i s_{i} si中最大的一个风险来衡量,即 max ⁡ { q i x i ∣ i = 1 , 2 , L , n } \max \left\{\boldsymbol{q}_{i} \boldsymbol{x}_{i} \mid \boldsymbol{i}=\mathbf{1}, \boldsymbol{2}, \mathbf{L}, \boldsymbol{n}\right\} max{qixii=1,2,L,n}
  2. 购买 s i s_{i} si所付交易费是一个分段函数,即  交易费  = { p i x i , x i > u i p i u i , x i ≤ u i \text { 交易费 }=\left\{\begin{array}{ll} \boldsymbol{p}_{i} \boldsymbol{x}_{i}, & \boldsymbol{x}_{i}>\boldsymbol{u}_{i} \\ \boldsymbol{p}_{i} \boldsymbol{u}_{i}, & \boldsymbol{x}_{i} \leq \boldsymbol{u}_{i} \end{array}\right.  交易费 ={pixi,piui,xi>uixiui
    而题目所给的定值 u i u_{i} ui相对总投资M很少, p i u i p_{i}u_{i} piui更小,这样购买 s i s_{i} si的净收益可以简化为 ( r i − p i ) x i (r_{i}-p_{i})x_{i} (ripi)xi
  3. 要使净收益尽可能大,总体风险尽可能小,这是一个多目标规划模型

目标函数为
{ max ⁡ ∑ i = 0 n ( r i − p i ) x i min ⁡ max ⁡ { q i x i } \left\{\begin{array}{l} \max \sum_{i=0}^{n}\left(r_{i}-p_{i}\right) x_{i} \\ \min \max \left\{q_{i} x_{i}\right\} \end{array}\right. {maxi=0n(ripi)ximinmax{qixi}
约束条件为
{ ∑ i = 0 n ( 1 + p i ) x i = M x i ≥ 0 , i = 0 , 1 , ⋯   , n \left\{\begin{array}{l} \sum_{i=0}^{n}\left(1+p_{i}\right) x_{i}=M \\ x_{i} \geq 0, \quad i=0,1, \cdots, n \end{array}\right. {i=0n(1+pi)xi=Mxi0,i=0,1,,n

a)在实际投资中,投资者承受风险的程度不一样,若给定风险一个界限a,使最大的风险 q i x i M ≤ a \frac{q_{i} x_{i}}{M} \leq a Mqixia,可找到相应的投资方案。这样把多目标规划变成一个目标的线性规划。

模型一 固定风险水平,优化收益
max ⁡ ∑ i = 0 n ( r i − p i ) x i    s.t.  { q i x i M ≤ a ∑ i = 0 n ( 1 + p i ) x i = M , x i ≥ 0 , i = 0 , 1 , ⋯   , n \max \sum_{i=0}^{n}\left(r_{i}-p_{i}\right) x_{i}\\ \ \\ \text { s.t. }\left\{\begin{array}{l} \frac{q_{i} x_{i}}{M} \leq a \\ \sum_{i=0}^{n}\left(1+p_{i}\right) x_{i}=M, \quad x_{i} \geq 0, \quad i=0,1, \cdots, n \end{array}\right. maxi=0n(ripi)xi  s.t. {Mqixiai=0n(1+pi)xi=M,xi0,i=0,1,,n
模型二 固定盈利水平,极小化风险
min ⁡ { max ⁡ { q i x i } }    s.t.  { ∑ i = 0 n ( r i − p i ) x i ≥ k ∑ i = 0 n ( 1 + p i ) x i = M , x i ≥ 0 , i = 0 , 1 , ⋯   , n \min \left\{\max \left\{q_{i} x_{i}\right\}\right\}\\ \ \\ \text { s.t. }\left\{\begin{array}{l} \sum_{i=0}^{n}\left(r_{i}-p_{i}\right) x_{i} \geq k \\ \sum_{i=0}^{n}\left(1+p_{i}\right) x_{i}=M, \quad x_{i} \geq 0, \quad i=0,1, \cdots, n \end{array}\right. min{max{qixi}}  s.t. {i=0n(ripi)xiki=0n(1+pi)xi=M,xi0,i=0,1,,n

b)投资者在权衡资产风险和预期收益两方面时,希望选择一个令自己满意的投资组合。因此对风险、收益分别赋予权重 0 < s ≤ 1 0<s \leq 1 0<s1 ( 1 − s ) (1-s) (1s),s称为投资偏好系数。

模型三
min ⁡ s { max ⁡ { q i x i } } − ( 1 − s ) ∑ i = 0 n ( r i − p i ) x i  s.t.  ∑ i = 0 n ( 1 + p i ) x i = M , x i ≥ 0 , i = 0 , 1 , 2 , ⋯   , n \min s\left\{\max \left\{q_{i} x_{i}\right\}\right\}-(1-s) \sum_{i=0}^{n}\left(r_{i}-p_{i}\right) x_{i}\\ \text { s.t. } \sum_{i=0}^{n}\left(1+p_{i}\right) x_{i}=M, \quad x_{i} \geq 0, \quad i=0,1,2, \cdots, n mins{max{qixi}}(1s)i=0n(ripi)xi s.t. i=0n(1+pi)xi=M,xi0,i=0,1,2,,n

1.4模型一的求解

 min  f = ( − 0.05 , − 0.27 , − 0.19 , − 0.185 , − 0.185 ) ( x 0 , x 1 , x 2 , x 3 , x 4 ) T  s.t.  { x 0 + 1.01 x 1 + 1.02 x 2 + 1.045 x 3 + 1.065 x 4 = 1 0.025 x 1 ≤ a 0.015 x 2 ≤ a 0.055 x 3 ≤ a 0.026 x 4 ≤ a x i ≥ 0 ( i = 0 , 1 , ⋯   , 4 ) \begin{array}{l} \text { min } f=(-0.05,-0.27,-0.19,-0.185,-0.185)\left(x_{0}, x_{1}, x_{2}, x_{3}, x_{4}\right)^{T} \\ \text { s.t. }\left\{\begin{array}{l} x_{0}+1.01 x_{1}+1.02 x_{2}+1.045 x_{3}+1.065 x_{4}=1 \\ 0.025 x_{1} \leq a \\ 0.015 x_{2} \leq a \\ 0.055 x_{3} \leq a \\ 0.026 x_{4} \leq a \\ x_{i} \geq 0(i=0,1, \cdots, 4) \end{array}\right. \end{array}  min f=(0.05,0.27,0.19,0.185,0.185)(x0,x1,x2,x3,x4)T s.t. x0+1.01x1+1.02x2+1.045x3+1.065x4=10.025x1a0.015x2a0.055x3a0.026x4axi0(i=0,1,,4)

由于a是任意给定的风险度,到底怎样没有一个准则,不同的投资者有不同的风险度。我们从a=0开始,以步长△a=0.001进行循环搜索,编程如下

clc,clear
a=0;hold on
while a<0.05
	c=[-0.05,-0.27,-0.19,-0.185,-0.185];
	A=[zeros(4,1),diag([0.025,0.015,0.055,0.026])];
	b=a*ones(4,1);
	Aeq=[1,1.01,1.02,1.045,1.065];
	beq=1;LB=zeros(5,1);
	[x,Q]=linprog(c,A,b,Aeq,beq,LB);
	Q=-Q;plot(a,Q,'*k');
	a=a+0.001;
end
xlabel('a'),ylabel('Q')

可以看出

(1)风险大,收益也打
(2)当投资越分散式,投资者承担风险越小,这与题意一致。冒险的投资者会出现集中投资的情况,保守的投资者则尽量分散投资
(3)在 a = 0.006 a=0.006 a=0.006附件有一个转折点。在这一点左边,风险增加很少时,利润增长很快;在这一点右边,风险大增加很大时,利润增长很缓慢。所以对于风险和收益没有特殊偏好的投资者涞水,应该选择曲线的转折点作为最优投资组合,大约是 a = 0.6 % , Q = 20 % a=0.6\%,Q=20\% a=0.6%,Q=20%,所对应的投资方案为  风 险 度  a = 0.006 ,  收 益  Q = 0.2019 , x 0 = 0 , x 1 = 0.24 x 2 = 0.4 , x 3 = 0.1091 , x 4 = 0.2212 \begin{aligned} &\text { 风 险 度 } a=0.006, \text { 收 益 } Q=0.2019,\\ &\quad x_{0}=0, \quad x_{1}=0.24\\ &x_{2}=0.4, x_{3}=0.1091, x_{4}=0.2212 \end{aligned}     a=0.006,   Q=0.2019,x0=0,x1=0.24x2=0.4,x3=0.1091,x4=0.2212

案例2——运输问题

某商品有m个产地、n个销地,各产地的产量分别为 a 1 , ⋯   , a m a_{1},\cdots,a_{m} a1,,am,各销地的需求量分别为 b 1 , ⋯   , b n b_{1},\cdots,b_{n} b1,,bn。若该商品由i产地运到j销地的单位运价为 c i j c_{ij} cij,问应该如何调运才能使总运费最省?

引入变量 x i j x_{ij} xij,其取值为由i产地运往j销地的该商品数量,模型为:
m i n ∑ i = 1 m ∑ j = 1 n c i j x i j s . t . { ∑ j = 1 n x i j = a j ∑ i = 1 m x i j = b j x i j ≥ 0 min\sum_{i=1}^{m}\sum_{j=1}^{n}c_{ij}x_{ij}\\ s.t.\left\{ \begin{aligned} \sum_{j=1}^{n}x_{ij}=a_{j}\\ \sum_{i=1}^{m}x_{ij}=b_{j}\\ x_{ij}\geq0 \end{aligned} \right. mini=1mj=1ncijxijs.t.j=1nxij=aji=1mxij=bjxij0

案例3——收益最大化

在这里插入图片描述

import pulp 
import numpy as np 
from pprint import pprint 
def transportation_problem(costs, x_max, y_max): 
	row = len(costs) 
	col = len(costs[0]) 
	prob = pulp.LpProblem(‘Transportation Problem’, sense = pulp.LpMaximize) 
	var = [[pulp.LpVariable(f’x{i}{j}, lowBound=0, cat=pulp.LpInteger) for j in range(col)] for i in range(row)] 
	#j在列循环上,i在行循环上
	flatten = lambda x: [y for l in x for y in flatten(l)] if type(x) is list else [x] 
	#np.flatten把多维数组转化成1维的
	#从i行j列转化成了i×j一维的
	prob += pulp.lpDot(flatten(var), costs.flatten()) 
	for i in range(row): 
		prob += (pulp.lpSum(var[i]) <= x_max[i]) 
	for j in range(col): 
		prob += (pulp.lpSum([var[i][j] for i in range(row)]) <= y_max[j]) 
	prob.solve() 
	return {‘objective’:pulp.value(prob.objective), ‘var’:[[pulp.value(var[i][j])for j in range(col)]for i in range(row)]} 
if __name__ == ‘__main__’: 
	costs = np.array([[500, 550, 630, 1000, 800, 700], [800, 700, 600, 950, 900, 930], [1000, 960, 840, 650, 600, 700], [1200, 1040, 980, 860, 880, 780]]) 
	max_plant = [76, 88, 96, 40] 
	max_cultivation = [42, 56, 44, 39, 60, 59] 
	res = transportation_problem(costs, max_plant, max_cultivation) 
	print(f’最大值为{res[“objective”]}) 	
	print(’各变量的取值为:’) 
	print(res[‘var’])

在这里插入图片描述

整数规划
若有某个变量不是整数,在松弛模型上分别添加约束: x ≤ f l o o r ( A ) 和 x ≥ c e i l ( A ) x\leq floor(A)和x\geq ceil(A) xfloor(A)xceil(A)然后再分别求解,这个过程叫做分支
所谓定界,叶子节点产生后,相当于给问题定了一个下界。每次新产生叶子节点,则更新下界。
分支定界代码

import math 
from scipy.optimize import linprog 
import sys 
def integerPro(c, A, b, Aeq, beq, t=1.0E-12): 
	res = linprog(c, A_ub=A, b_ub=b, A_eq=Aeq, b_eq=beq) 
	#判断满足约束吗,不是就形成很大的数值
	if (type(res.x) is float): 
		bestX = [sys.maxsize]*len(c) 
	#是整数就读取最优解
	else:
		bestX = res.x 
	bestVal = sum([x*y for x,y in zip(c, bestX)]) 
	if all(((x-math.floor(x))<t or (math.ceil(x)- x)<t) for x in bestX): 
		return (bestVal, bestX) 
	else:
		ind = [i for i, x in enumerate(bestX) if (x-math.floor(x))>t and (math.ceil(x)-x)>t][0] 
		newCon1 = [0]*len(A[0]) 
		newCon2 = [0]*len(A[0]) 
		newCon1[ind] = -1 
		newCon2[ind] = 1 
		newA1 = A.copy() 
		newA2 = A.copy() 
		newA1.append(newCon1) 
		newA2.append(newCon2) 
		newB1 = b.copy() 
		newB2 = b.copy() 
		newB1.append(-math.ceil(bestX[ind]))
		newB2.append(math.floor(bestX[ind])) 
		r1 = integerPro(c, newA1, newB1, Aeq, beq) 
		r2 = integerPro(c, newA2, newB2, Aeq, beq) 
		if r1[0] < r2[0]return r1 
		else:
			return r2 
c = [3, 4, 1] 
A = [[-1, -6, -2], [-2, 0, 0]] 
b = [-5, -3] 
Aeq = [[0,0,0]] 
beq = [0] 
print(integerPro(c, A, b, Aeq, beq))

在这里插入图片描述
非线性规划
在这里插入图片描述

例3:计算 1 x + x \frac{1}{x}+x x1+x的最小值

from scipy.optimize import minimize 
import numpy as np 
#计算 1/x+x 的最小值 
def fun(args): 
	a=args 
	v=lambda x:a/x[0] +x[0] 
	return v
if __name__ == "__main__": 
	args = (1) #a 
	x0 = np.asarray((2)) # 初始猜测值 
	res = minimize(fun(args), x0, method='SLSQP’) 
	print(res.fun) 
	print(res.success) 
	print(res.x)

在这里插入图片描述

函数的最小是为2点多,可以看出minimize求的局部最优

例4:计算 ( 2 + x 1 ) 1 + x 2 − 3 x 1 + 4 x 3 \frac{(2+x_{1})}{1+x_{2}}-3x_{1}+4x_{3} 1+x2(2+x1)3x1+4x3的最小值,其中 x 1 、 x 2 、 x 3 x_{1}、x_{2}、x_{3} x1x2x3的范围在0.1到0.9之间

from scipy.optimize import minmize
import numpy as np
def fun(args):
	a,b,c,d=args
	v=lambda x: (a+x[0])/(b+[1])-c*x[0]+d*x[2]
	return v
	
def con(args): 
	# 约束条件 分为eq 和ineq 
	#eq表示 函数结果等于0 ; ineq 表示 表达式大于等于0 					
	x1min,x1max,x2min,x2max,x3min,x3max = args 
	cons = ({'type':'ineq','fun':lambda x:x[0]-x1min},\ {'type':'ineq','fun': lambda x:-x[0]+x1max},\ {'type':'ineq','fun': lambda x:x[1]-x2min},\ {'type':'ineq','fun': lambda x:-x[1]+x2max},\ {'type':'ineq','fun': lambda x:x[2]-x3min},\ {'type':'ineq','fun': lambda x:-x[2]+x3max}) 
	return cons
	
if __name__ == "__main__": 
	#定义常量值 
	args = (2,1,3,4) #a,b,c,d 
	#设置参数范围/约束条件 
	args1 = (0.1,0.9,0.1,0.9,0.1,0.9) #x1min, x1max, x2min, x2max
	cons = con(args1) 
	#设置初始猜测值 
	x0 = np.asarray((0.5,0.5,0.5)) 
	res = minimize(fun(args),x0, method='SLSQP',constraints=cons) 
	print(res.fun) 
	print(res.success) 
	print(res.x)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值