2021年华数杯数学建模B题进出口公司的货物装运策略求解全过程文档及程序

2021年华数杯数学建模

B题 进出口公司的货物装运策略

原题再现:

  进出口公司经常需要将销售的货物通过货运飞机进行运输。货运飞机有大、中、小三种类型,每一种飞机均有前、中、后三个货舱,每个货舱有最大容积、最大载重量的限制。每种货物可以在一个或多个货舱中任意分布,多种货物可以混装。为了保证飞机飞行平稳,三个货舱中实际载重必须与其最大载重成比例。详细数据见附件1。
  销售的货物有HW1-HW10等10种,每件货物均为长方体,货物尺寸、体积(立方米)、重量(吨)、运输单价均已知。进出口公司为了精确营销,收集了前50个周期的每种货物的销售量以及下一个周期的销售价格。下一个周期货物的销售量是随机的,但销售价格是已知的,而且所有货物在装运飞机之前的所有成本为货物销售价格的40%;按照规则,一个周期内,产品如果不能销售出去,产品只能按照销售价的30%清仓甩卖。数据见附件2。
  请结合附件的数据,建立数学模型,解决下列问题:
  1.假设只有大、中、小三种类型的货运飞机各一架,所有货物可以直接装入飞机,并按照前50个周期各种货物销售量的平均值来组织货源。问如何装运,可以使得货运飞机尽量不留空隙?
  2. 继续按照前50个周期各种货物销售量的平均值来组织货源,要求体积在2m3以下的货物都要用集装箱装载。集装箱为长方体,封闭,塑料制品,厚度为5厘米,数据见附件3。集装箱尽量不留空隙,货运飞机尽量不留空隙,基于这种思路,请分析确定使用哪种机型最为合适,至少需要多少架次,并给出各架次的具体装运方案。
  3. 接第2问,进出口公司总觉得以集装箱尽量不留空隙、货运飞机尽量不留空隙作为为货物装运的思路影响了他们的经济效益。请你帮助他们调整一下装运方案,以满足他们的经济期望,并计算最佳利润。
  4. 市场对产品的需求是不确定的,在一个周期内组织多少货源是有风险的。为安全起见,进出口公司希望能够得到在可靠性为95%下的最大利润值,以及为实现这个利润值应该实施的货运装运策略。请帮助其实现他们的目标。
  5. 如果将可靠性95%改为70%,最大利润值和装运策略将如何改变?

整体求解过程概述(摘要)

  随着经济社会的不断发展,物流行业也随之飞速发展,巨大的物流订单席卷而来,于是货运装配问题就显得日益重要.而传统的人工规划经验型货运配送逐渐凸显出其难以达到最优化配送和成本难以控制的缺陷,于是这就要求我们思考如何进一步地考虑如何设计数学模型对货机装配这一过程进行最优化方案设计.本文设计多种装配规则,同时设计了如何最大化空间分割以提高货舱空间利用率的方案,且进一步地考虑了市场的风险性与不确定性从而对货运装配的供货量进行有效把控,取得了良好效果.
  针对问题一的经典三维装箱问题 (3D­KLP),我们以货舱的体积利用率最大作为目标函数,设置重量约束、体积约束、三维尺寸摆放约束、重量平衡约束等多个约束条件.其次,对于货物的摆放规则,我们首先提出了占角策略的定位规则和密度升序的定序规则,其次设计了在空间编码的前提下针对剩余空间的三空间分割原则,然后利用 python 进行编程进行问题求解.最终我们得到了三架不同类型的货机的最优货运方案并进行了可视化,在保证体积利用率最大的前提下合理最大化地利用有限的货舱空间.
  针对问题二,我们以集装箱与货舱的空间利用率为目标函数.首先对小型货物的集装箱装载进行设计,通过对集装箱的初筛,我们选取柔性航空集装箱,随后我们建立二维装箱模型,对同构同向的货物进行摆放,求解不同集装箱的空间利用率,最终确定将四种小型货物HW2,HW6,HW7,HW10 均采用 Y7 柔性集装箱进行装配,并求解出集装箱货物的摆放方式,同时对货物数据进行更新.其次,我们改进第一问所建模型,通过增加约束条件条件,比较不同的定序规则,再次利用 python 编程求解,最终确定选取小型货机作为所选机型,且按照最长边递减的定序规则进行摆放,所需架次为 370 架,货机的空间利用率约为 13.9%.
  针对问题三,为考虑经济效益,我们不再以空间利用率为目标函数,而是对货运的利润进行分析,我们引入了三种机型的附加成本 A,B,C,选取第二问中所需架次最少的货机配送方案,建立模型以控制货机运送成本最小,以得到实际的利润最大值,并确定出最终的货运运输方案.
  针对问题四,我们首先绘制出每种货物历史需求量的 Q­Q 图,判断出其近似符合正态分布.通过观察所给 95%和 70%与正态分布 3𝜎 原则中概率的相似性,给出可靠性的定义为货物历史需求量的可靠性,即实际运输时的每种货物需求量,只能取自 (𝜇 − 2𝜎,𝜇 + 2𝜎) 的历史数据.我们再将实际需求量和货运总量离散化,假定为 𝜇 − 2𝜎,𝜇,𝜇 + 2𝜎 三种数值,并根据 3𝜎原则,给出实际需求量为这三种数值的概率.最后建立模型通过计算经济期望,比较得出最优经济期望下的装运方案、机型选择以及所需架次.
  针对问题五,我们沿用了第四问的思路和方法进行求解,并得出最优经济期望下的装运方案、机型选择以及所需架次.

问题分析:

  问题一是经典三维装箱问题(3D­KLP),我们以飞机货舱尽量不留空隙为目的,建立数学模型求解.我们选择货舱的体积利用率作为目标函数,求解目标函数的最大值,并得出相应的摆放情况.为建立模型,我们首先对货舱进行建系,同时对空间进行编码处理.由于单个货物的重量较大,货舱运载量的主要限制条件为载重限制,故我们采用“密度递增”的定序规则和“占角策略”的定位规则,将密度最小的货物第一个放入原点所在的角落,之后再利用三空间分割规则对剩余空间划分,重复此过程,在货物摆放过程中,我们又设定了重量约束,货舱重量平衡约束,体积约束等约束条件,直到剩余空间不再支持继续放入货物,从而得出空间利用率以及货物摆放情况.
  第二问是三维装箱问题,我们仍是选择将集装箱和货舱空间利用率作为目标函数,求解目标函数的最大值,并得出相应的摆放情况,以及所需的飞机架次.集装箱非一次性用品,可循环使用,故不考虑其数量限制.我们首先通过比较选择柔性航空集装箱,将小于 2m³ 的进行装箱,为运输方便,每种货物仅装填一种集装箱.我建立模型求解同构同向二维装箱问题,选择合适的集装箱,并计算新集装箱的体积、数量、重量,以代替原货物的指标.我们进而将问题一的模型进行改进,仍是考虑“密度递增”的定序规则,将集装箱和体积大于 2m³ 的货物一并装入飞机,货物装尽时,计算空间利用率和飞机的架次.
  在第三问中,要求调整之前的货运策略,使得经济效益提高,以达到经济期望.于是在第一、二问的基础上,我们通过不同的定序规则把货物或集装箱进行摆放,例如最长边递减规则、密度规则、体积规则等等,来得到不同的货运方案.由于货物的数量不变,那么我们假设货物能够全部运走且货物的经济效益能够发挥到最大,即货物的利润为一个定值,则更多的经济效益要依赖于飞机所带来的的成本大小.由于飞机在空中的飞行成本由货物的运输成本决定,与飞机的选择无关.因此我们假定大、中、小三种类型的飞机由于装卸货、起降带来的附加成本为 A、B、C(A>B>C),依靠于未定的 A、B、C 值和更少的飞机架次来确定最少成本.进而利用利润=销售额­货物成本­运输成本­附加成本算出最大利润.
  针对问题四,我们首先对附件 2 中的每个货物的历史需求量进行分析,我们分析每种货物历史需求量的正态分布性,画出每种货物历史需求量的 Q­Q 图,发现每种货物的历史需求量均符合正态分布.同时,我们观察到问题四与问题五中可靠性 95%、70% 与正态分布中 3σ原则中的概率 95.45% 和 68.27% 具有较大的相似性,因此我们定义可靠性 95% 的含义是指附件二中各种货物历史数据仅有 95%的数据可代表实际的运输情形,即实际的运输时的每种货物需求量,只能取自 (𝜇𝑖 − 2𝜎𝑖,𝜇𝑖 + 2𝜎𝑖) 的历史数据,其中 𝜇 为历史数据的均值,𝜎 为历史数据的标准差,𝑖 为不同的货物种类.我们将每种货物的实际需求量离散化,假定为三种数值,分别为 𝜇𝑖 − 2𝜎𝑖,𝜇𝑖,𝜇𝑖 + 2𝜎𝑖,分别设定其概率分布,同时,我们将所有货物的装运总量也只分为三种情况:每种货物的货运量分别为 𝜇𝑖 − 2𝜎𝑖,𝜇𝑖,𝜇𝑖 + 2𝜎𝑖 件,建立模型计算经济期望.再通过比较,得出在最优经济期望下的装货方式、机型的选择以及所需架次.
  我们仍是按照问题四的思路,首先确定可靠性 70%的含义,即货物历史数据仅有 70%的数据可代表实际的运输情形,即实际运输时的每种货物需求量,只能取自 𝜇𝑖 − 𝜎𝑖,𝜇𝑖 + 𝜎𝑖 的历史数据.我们仍是将每种货物的实际需求量离散化,假定为三种数值,分别为 𝜇𝑖 − 𝜎𝑖,𝜇𝑖,𝜇𝑖 + 𝜎𝑖(𝑖 为货物种类),设定其概率分布.同时,我们将所有货物的装运总量也只分为三种情况:每种货物均只装 𝜇𝑖 − 𝜎𝑖,𝜇𝑖,𝜇𝑖 + 𝜎𝑖 件,建立模型计算经济期望.再通过比较,得出在最优经济期望下的装货方案、机型的选择以及所需架次.

模型假设:

  1. 机舱内与集装箱内货物摆放位置无区域限制
  2. 货物均为长方体型且质量分布均匀
  3. 货物具有良好的可耐压性,不会由于堆叠而发生变形,且无危险品、特殊物品等货物
  4. 所有装载过程认定为离线装载过程
  5. 所放置货物的各边与货舱边或集装箱边正交或平行
  6. 假设不会出现物资悬空的情况
  7. 假设一种货物仅由一种集装箱装载.且货物按照同样的方向,以同样的姿态进行摆放

模型的建立与求解

  问题一要求我们尽可能地将三架货运飞机填充不留空隙,则问题转化为经典的三维背包装载问题(3D­KLP),同时由于装载货物类型较多且尺寸又各不相同,则进一步认定为强异构类装载问题.其中我们将模型中货物的价值定义为货物的体积,则目标函数转化为货机的体积利用率达到最大,下面开始模型的建立与求解.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

利用三空间分割规则进行货物摆放

  下面我们进行装舱约束,对于每个货舱长方体,我们首先制定了如下的装舱规则:
  (1) 定序规则
  货物装载顺序将会影响集装箱空间布局的质量,在设计装载方案的过程中,为了确定货物放入集装箱中的先后顺序,较多地采用定序规则.在此规则中常用的有体积递减、重量递减、最长边递减等规则.在此问题中,我们按照货物密度对货物进行升序排序,优先考虑摆放密度最小的货物.
  (2) 定位规则
在待装载货物遵循一定的先后次序逐个装箱的过程中,需要相应的定位规则确定其摆放位置.定位规则包含多种方法,首先将货物放置在集中的一角,然后沿着边依次装载,最后再填满中心的占角策略应用较多.本文采用占角策略开展装载研究.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  对于问题二,我们沿袭第一问的思路,选择将集装箱和货舱的空间利用率作为目标函数,建立模型求解目标函数的最大值,并得出相应的摆放情况,以及所需的飞机架次.我们从实际情况出发,先保证集装箱的利用率进行选定集装箱,再考虑机舱的空间利用率从而确定机型.由于飞机架次不受限制,故我们将第一问的模型进行改进,着重体现在改变飞机的定序规则,求解最优空间利用率下的定序规则,机型选择与飞机所需的架次.

选择集装箱并进行集装箱装配

  我们首先进行初步考量,对于大型货机,用货物的总重量除以大型货机的总载重量,得到大货机至少需要 6299.53/34≈185 架次,数值较为庞大,对于中、小货机,同样计算出也至少需要 242,350 架.其次我们考虑到由于集装箱非一次性用品,可以反复使用,并且货机架次多,单次飞行所需集装箱数量较少,故我们不考虑集装箱的个数限制,仅考虑集装箱的体积限制.
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

选择货机机型确定具体配送方案

  在进行完集装箱装配后,我们开始进行装机过程,我们对第一问中的模型进行改进,增加了货物的数量约束条件,保证货物可以全部装机.其次改变定序规则,我们分别从按密度递增,按体积递减,按最长边递减三种定序规则对三种机型分别进行了求解,最终选定空间利用率最大的选择作为最终的机型选择与摆放方案.我们利用 python 进行求解,具体代码见附录 3,得出下表结果:
在这里插入图片描述
  根据题目要求,为使货舱尽量不留空隙,则要求空间体积利用率最大,故选择小型货机进行配送,需要 370 架次飞机,具体运送方案见支撑材料 small_cargo_length.xlsx. 表中 J2,J6,J7,J10即代表运送 HW2,HW6,HW7,HW10 货物的集装箱,自上而下为按前中后舱排列的装配方案.

  通过对大中小飞机体积利用率的比较,我们发现小飞机在体积利用率上明显高于大中型飞机,若仍以集装箱尽量不留空隙、货运飞机尽量不留空隙作为货物装运的思路,即以空间利用率尽可能高作为货物装运的思路,不考虑飞机的其它成本,确实会影响经济效益.我们考虑到在实际生活中,货物运输的利润不仅仅是只依靠于货物本身的价值,同样也取决于交通运输的成本.已知整个货运过程的利润 Q 等于货物总价值减去总成本 K,总成本又包括货物置备成本、货物的空中运输成本和由于装卸货,飞机起降带来的飞机的附加成本.由于货源已经确定,货物数量也不再发生变化,即货物总价值 Value、货物置备成本、货物的运输成本不发生改变,所以如果仅仅只考虑空间利用率不足以获得经济效益最大.因此在第三问中我们引入三种机型的附加成本 A、B、C,来达到提高经济效益的目的,即:
在这里插入图片描述
  为了更好地建立模型同时避免将问题复杂化,我们补充以下假设:
  1. 货物的数量不发生改变,且其经济效益能够发挥到最大
  2. 每架大、中、小三种类型的飞机的其它成本分别是 A、B、C(万元)且恒定不变
  3. 飞机的飞行架次没有限制
  4. 货物的运输只选定一种类型的飞机
在这里插入图片描述

对问题中可靠性的定义

  我们观察附件 2 所给货物历史数据,发现货物的历史需求量可能会符合某种分布规律,于是我们画出了每种货物历史需求量的 Q­Q 图如图 6,发现每种货物的历史需求量所代表的数据点基本都分布在一条直线上,所以我们认定每种货物的历史需求量近似符合正态分布.
在这里插入图片描述
  其次根据正态分布的 3σ 原则,数值分布在 (𝜇 − 𝜎,𝜇 + 𝜎) 中的概率为 0.6827,数值分布在(𝜇 − 2𝜎,𝜇 + 2𝜎) 中的概率为 0.9545,我们将第四问中可靠性 95% 与概率 0.9545 相关联,将第五问中可靠性 70% 与 0.6827 相关联,进而给出可靠性的定义:可靠性为 95% 是指:附件二中各种货物历史数据仅有 95% 的数据可代表实际的运输情形,即实际的运输时的每种货物需求量,只能取自在 (𝜇 − 2𝜎,𝜇 + 2𝜎) 的历史数据.

在可靠性为 95% 下求解最大利润货运方案

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  我们依据第四问原理,同理将可靠性 70%与 0.6827 相关联,给出可靠性的定义,可靠性为 70%是指:附件二中各种货物历史数据仅有 70%的数据可代表实际的运输情形,即实际的运输时的每种货物需求量,只能取自 (𝜇 − 𝜎,𝜇 + 𝜎) 的历史数据.

在可靠性为 70% 下求解最大利润货运方案

在这里插入图片描述
在这里插入图片描述
  所以最终的货运装运策略取决于各机型单位附加成本的取值,选取利润最高的机型及装配方案即可,其中装配时定序规则依然采用按最长边递减的规则,对应的九种情况的货机详细摆放设计见支撑材料.

论文缩略图:

在这里插入图片描述
在这里插入图片描述

程序代码:

求解货运装配方案代码
import pandas as pd
import matplotlib.pyplot as plt
import math
import numpy as np
def load(m): #对第m个机开始装配,m:0-8
Space=[0,0,0,data.L[m],data.W[m],data.H[m]]
for location in S:
if location[3]==1:
front_load(m,location,Space)
elif location[3]==2:
#right_load(m,2.96,location,Space)
right_load(m,3.17,location,Space)
elif location[3]==3:
#up_load(m,2.96,2.12,location,Space)
up_load(m,3.17,0.85,location,Space)
def constraint1(m,i): #在m号舱每个可放置点放置i时判断约束条件是否满足约束条件
if sum(solution.mim[m])+data.m[i] > data.M[m]: #重量约束
return False
if sum(solution.vim[m])+data.v[i] > data.V[m]: #体积约束
return False
return True
def constraint2(m,i,location): #三维尺寸约束
if location[0]+data.l[i]>data.L[m] or location[1]+data.w[i]>data.W[m] or location
[2]+data.h[i]>data.H[m]:
return False
return True
def front_load(m,location,space):
space[0]+=location[0]
L_space=max(space[3]-space[0],space[4]-space[1])
W_space=min(space[3]-space[0],space[4]-space[1])
H_space=space[5]
flag=0 #标志是否前空间成功放置
for i in range(10):
choice=[data.l[i],data.w[i],data.h[i]] #六种摆放方式
for j in choice:
for k in choice:
for l in choice:
if k!=j and k!=l:
if j<L_space and k<W_space and l<H_space:
if constraint1(m,i)==True and constraint2(m,i,location)==True:
solution.Cim[m].append(i)
solution.nameim[m].append(data.name[i])
solution.xim[m].append(j)
solution.yim[m].append(k)
solution.zim[m].append(l)
solution.vim[m].append(data.v[i])
solution.mim[m].append(data.m[i])
#S.remove(location)
flag=1
break
if flag==1:
location1=[location[0]+j,0,0,1]
location2=[location[0],k,0,2]
location3=[location[0],0,l,3]
front_load(m,location1,space)
right_load(m,j,location2,space)
up_load(m,j,k,location3,space)
def right_load(m,var,location,space):
space[1]+=location[1]
space[3]=location[0]+var
L_space=max(space[3]-space[0],space[4]-space[1])
W_space=min(space[3]-space[0],space[4]-space[1])
H_space=space[5]
flag=0 #标志是否右空间成功放置
for i in range(10):
choice=[data.l[i],data.w[i],data.h[i]] #六种摆放方式
for j in choice:
for k in choice:
for l in choice:
if k!=j and k!=l:
if j<L_space and k<W_space and l<H_space:
if constraint1(m,i)==True and constraint2(m,i,location)==True:
solution.Cim[m].append(i)
solution.nameim[m].append(data.name[i])
solution.xim[m].append(j)
solution.yim[m].append(k)
solution.zim[m].append(l)
solution.vim[m].append(data.v[i])
solution.mim[m].append(data.m[i])
#S.remove(location)
flag=1
break
if flag==1:
location1=[j,0,0,1]
location2=[0,location[1]+k,0,2]
location3=[0,location[1],l,3]
front_load(m,location1,space)
right_load(m,j,location2,space)
up_load(m,j,k,location3,space)
def up_load(m,var1,var2,location,space):
space[2]+=location[2]
space[3]=location[0]+var1
space[4]=location[1]+var2
L_space=max(space[3]-space[0],space[4]-space[1])
W_space=min(space[3]-space[0],space[4]-space[1])
H_space=space[5]
flag=0 #标志是否右空间成功放置
for i in range(10):
choice=[data.l[i],data.w[i],data.h[i]] #六种摆放方式
for j in choice:
for k in choice:
for l in choice:
if k!=j and k!=l:
if j<L_space and k<W_space and l<H_space:
if constraint1(m,i)==True and constraint2(m,i,location)==True:
solution.Cim[m].append(i)
solution.nameim[m].append(data.name[i])
solution.xim[m].append(j)
solution.yim[m].append(k)
solution.zim[m].append(l)
solution.vim[m].append(data.v[i])
solution.mim[m].append(data.m[i])
#S.remove(location)
flag=1
break
if flag==1:
location1=[j,0,location[2],1]
location2=[0,k,location[2],2]
location3=[0,0,location[2]+l,3]
front_load(m,location1,space)
right_load(m,j,location2,space)
up_load(m,j,k,location3,space)
class Data:
#九个货舱 大前大中大后中前中中中后小前小中小后
L=[18,20,16,15,18,13,10,12,9] #货机的长
W=[8.45,8.45,8.45,5.48,5.48,5.48,3.45,3.45,3.45] #货机的宽
H=[13.4,14.8,12.6,10.2,13.4,9.7,3.4,3.4,3.4] #货机的高
V=[2038.14,2501.2,1703.52,838.44,1321.776,691.028,117.3,140.76,105.57]#货机体积
M=[10,16,8,8,12,6,6,8,4]#货机载重量
#十种货物
l=list(df2['长度']) #货物长度
w=list(df2['宽度']) #货物宽度
h=list(df2['高度']) #货物高度
v=list(df2['货物体积']) #货物体积
#rou=list(df2['货物密度']) #货物密度 kg/m3
m=list(df2['重量']) #货物重量
N=list(df2['平均供应件数']) #供货数量
name=list(df2['货物名称']) #货物名称
data=Data()
class Solution:
Cim=[[]for i in range(9)] #存储第i个货物的类别
xim=[[]for i in range(9)] #存储第m个货机中第i个放置的货物的x坐标
yim=[[]for i in range(9)] #存储y坐标
zim=[[]for i in range(9)] #存储z坐标
mim=[[]for i in range(9)] #存储第i个货物的重量
vim=[[]for i in range(9)] #存储第i个货物的体积
nameim=[[]for i in range(9)] #第i个货物的类别名
solution=Solution()
S=[] #可放置点
#S.append((2.96,0,0,1))
#S.append((0,0,1.21,3))
#S.append((0,2.12,0,2))
S.append((3.17,0,0,1))
S.append((0,0.85,0,2))
S.append((0,0,2.12,3))
for i in range(9): #都装上第一个货物
solution.nameim[i].append(data.name[0])
solution.xim[i].append(0)
solution.yim[i].append(0)
solution.zim[i].append(0)
#solution.mim[i].append(2.1)
solution.mim[i].append(0.7)
#solution.vim[i].append(7.592992)
solution.vim[i].append(5.712340)
solution.Cim[i].append(0)
data.N[0]-=9
for i in range(9):
load(i)

求解集装箱装配方案代码

def space(my_list, L, W):
alist = []
for i in my_list:
for j in my_list:
if i == j:
continue
else:
U = (i * j * (L // i) * (W // j))/(L * W)
#print(i, j)
alist.append(U)
return alist
my_list = [[1.32, 0.64, 0.84], [0.98, 0.42, 0.52], [1.5, 1]]
for i in my_list:
x = space(i, 2.891, 2.338)
x.sort()
print(x.pop())
print()
for i in my_list:
y = space(i, 1.36, 2.338)
y.sort()
print(y.pop())
print()
for i in my_list:
z = space(i, 2.235, 2.643)
z.sort()
print(z.pop())
  • 9
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值