• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

数学建模--优化类模型

武飞扬头像
派大星先生c
帮助1

目录

一、根据目标函数约束条件类型分类

1、线性规划

①线性规划模型的一般形式

②用MATLAB优化工具箱解线性规划

 ③模型分析    

 2、非线性规划

①非线性规划的基本概念

②非线性规划的基本解法

③二次规划

④一般非线性规划 

二、控制变量类型分类

1、整数规划

①matlab编程

②模型求解

2、混合整数规划(MIP)

①matlab语法

②模型案例

3、0-1规划

①应用范围

②案例分析

③matlab代码如下:

三、其他分类方法

1、单目标规划与多目标规划

①理想点法

 ②线性加权和法

 ③最大最小值法

 ④目标规划法

 ⑤模糊数学求解方法

2、动态规划与静态规划

①动态规划思路

②最短路径规划

3、随机规划与确定规划

①随即规划

②案例分析

一、根据目标函数约束条件类型分类

1、线性规划

①线性规划模型的一般形式

目标函数和所有的约束条件都是设计变量的线性函数。

学新通

学新通 ②用MATLAB优化工具箱解线性规划

学新通

学新通

 ③模型分析    学新通

  1.  
    c=[-0.4 -0.28 -0.32 -0.72 -0.64 -0.6];
  2.  
    A=[0.01 0.01 0.01 0.03 0.03 0.03;0.02 0 0 0.05 0 0;0 0.02 0 0 0.05 0;0 0 0.03 0 0 0.08];
  3.  
    b=[850;700;100;900];
  4.  
    Aeq=[];
  5.  
    beq=[];
  6.  
    vlb=[0;0;0;0;0;0];
  7.  
    vub=[];
  8.  
    [x,fval]=linprog(c,A,b,Aeq,beq,vlb,vub)

   学新通

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

  1.  
    a=0;
  2.  
    while(1.1-a)>1
  3.  
    c=[-0.05 -0.27 -0.19 -0.185 -0.185];
  4.  
    Aeq=[1 1.01 1.02 1.045 1.065];
  5.  
    beq=[1];
  6.  
    A=[0 0.025 0 0 0;0 0 0.015 0 0;0 0 0 0.055 0;0 0 0 0 0.026];
  7.  
    b=[a;a;a;a];
  8.  
    vlb=[0,0,0,0,0];
  9.  
    vub=[];
  10.  
    [x,val]=linprog(c,A,b,Aeq,beq,vlb,vub);
  11.  
    a
  12.  
    x=x'
  13.  
    Q=-val
  14.  
    plot(a,Q,'.')
  15.  
    axis([0 0.1 0 0.5])
  16.  
    hold on
  17.  
    a=a 0.001;
  18.  
    end
  19.  
    xlabel('a'),ylabel('Q')
  20.  
     
学新通

a = 0.0030  x = 0.4949      0.1200      0.2000       0.0545      0.1154      Q = 0.1266

a = 0.0060  x = 0               0.2400      0.4000       0.1091      0.2212      Q = 0.2019

a = 0.0080  x = 0.0000      0.3200      0.5333       0.1271      0.0000      Q = 0.2112

a = 0.0100  x = 0               0.4000      0.5843       0               0               Q =0.2190

a = 0.0200  x = 0               0.8000      0.1882       0               0               Q =0.2518

a = 0.0400  x = 0.0000      0.9901      0.0000       0               0               Q =0.2673

学新通                 

 2、非线性规划

①非线性规划的基本概念

 定义   如果目标函数或约束条件中至少有一个是非线性函数,则最优化问题就叫做非线性规划问题

学新通

②非线性规划的基本解法

 罚函数法:SUTM外点法、SUTM内点法(障碍罚函数法)

近似规划法

③二次规划

学新通

   用MATLAB软件求解,其输入格式如下:

   1.x=quadprog(H,C,A,b);

   2.x=quadprog(H,C,A,b,Aeq,beq);

   3.x=quadprog(H,C,A,b,Aeq,beq,VLB,VUB);

   4.x=quadprog(H,C,A,b, Aeq,beq ,VLB,VUB,X0);

   5.x=quadprog(H,C,A,b,Aeq,beq,VLB,VUB,X0,options);

   6.[x,fval]=quaprog(…);

   7.[x,fval,exitflag]=quaprog(…);

   8.[x,fval,exitflag,output]=quaprog(…);

学新通

 写成标准式:

学新通

  1.  
    H=[1 -1; -1 2];
  2.  
    c=[-2 ;-6];
  3.  
    A=[1 1; -1 2];
  4.  
    b=[2;2];
  5.  
    Aeq=[];
  6.  
    beq=[];
  7.  
    VLB=[0;0];VUB=[];
  8.  
    [x,z]=quadprog(H,c,A,b,Aeq,beq,VLB,VUB)

 运算结果为:

x = 0.6667        1.3333
z = -8.2222

④一般非线性规划 

学新通

1、首先建立M文件fun.m,用来定义目标函数FX):

2、若约束条件中有非线性约束:

G(X)Ceq(X)=0,则建立M文件nonlcon.m定义函数G(X)与Ceq(X):

function [G,Ceq]=nonlcon(X)

G=…

Ceq=…

3、 建立主程序.求解非线性规划的函数是fmincon,命令的基本格式如下:

(1)  x=fmincon(‘fun’,X0,A,b)

(2)  x=fmincon(‘fun’,X0,A,b,Aeq,beq)

(3)  x=fmincon(‘fun’,X0,A,b, Aeq,beq,VLB,VUB)

(4) x=fmincon(‘fun’,X0,A,b,Aeq,beq,VLB,VUB,’nonlcon’)

(5)x=fmincon(‘fun’,X0,A,b,Aeq,beq,VLB,VUB,’nonlcon’,options)  

学新通

(6) [x,fval]= fmincon(…)

(7) [x,fval,exitflag]= fmincon(…)

(8)[x,fval,exitflag,output]= fmincon(…)

4、例题解释

学新通

 写成标准式:

学新通

 先建立M-文件 fun3.m:

  1.  
        function f=fun3(x);
  2.  
     
  3.  
        f=-x(1)-2*x(2) (1/2)*x(1)^2 (1/2)*x(2)^2

再建立主程序youh2.m:

  1.  
    x0=[1;1];
  2.  
     A=[2 3 ;1 4]; b=[6;5];
  3.  
     Aeq=[];beq=[];
  4.  
     VLB=[0;0]; VUB=[];
  5.  
     [x,fval]=fmincon('fun3',x0,A,b,Aeq,beq,VLB,VUB)

运行结果为:

  1.  
    x = 07647 1.0588
  2.  
    fval = -2.0294

二、控制变量类型分类

1、整数规划

①matlab编程

利用Matlab的线性规划指令:

[x,fval]=linprog(f,A,b,Aeq,beq,lb,ub)

编写计算整数规划函数,输入与输出与上述指令相同

分枝定界法(递归实现)

  1.  
    function [x,fval,status] = intprog(f,A,B,I,Aeq,Beq,lb,ub,e)
  2.  
     
  3.  
    %整数规划求解函数 intprog()
  4.  
     
  5.  
    %     其中 f为目标函数向量
  6.  
     
  7.  
    %     A和B为不等式约束 Aeq与Beq为等式约束
  8.  
     
  9.  
    %     I为整数约束
  10.  
     
  11.  
    %     lb与ub分别为变量下界与上界
  12.  
     
  13.  
    %     x为最优解,fval为最优值
  14.  
     
  15.  
    %例子:
  16.  
     
  17.  
    %        maximize 20 x1 10 x2
  18.  
     
  19.  
    %        S.T.
  20.  
     
  21.  
    %                5 x1 4 x2 <=24
  22.  
     
  23.  
    %                2 x1 5 x2 <=13
  24.  
     
  25.  
    %                   x1, x2 >=0
  26.  
     
  27.  
    %                   x1, x2是整数
  28.  
     
  29.  
    % f=[-20, -10];
  30.  
     
  31.  
    % A=[ 5  4; 2 5];
  32.  
     
  33.  
    % B=[24; 13];
  34.  
     
  35.  
    % lb=[0 0];
  36.  
     
  37.  
    % ub=[inf inf];
  38.  
     
  39.  
    % I=[1,2];
  40.  
     
  41.  
    % e=0.000001;
  42.  
     
  43.  
    % [x v s]= IP(f,A,B,I,[],[],lb,ub,,e)
  44.  
     
  45.  
    % x = 4     1  v = -90.0000   s = 1
  46.  
     
  47.  
     
  48.  
     
  49.  
    % 控制输入参数
  50.  
     
  51.  
    if nargin < 9, e = 0.00001;
  52.  
     
  53.  
       if nargin < 8, ub = [];
  54.  
     
  55.  
          if nargin < 7, lb = [];
  56.  
     
  57.  
             if nargin < 6, Beq = [];
  58.  
     
  59.  
                if nargin < 5, Aeq = [];
  60.  
     
  61.  
                   if nargin < 4, I = [1:length(f)];
  62.  
     
  63.  
                   end, end, end, end, end, end
  64.  
     
  65.  
     
  66.  
     
  67.  
    %求解整数规划对应的线性规划,判断是否有解
  68.  
     
  69.  
    options = optimset('display','off');
  70.  
     
  71.  
    [x0,fval0,exitflag] = linprog(f,A,B,Aeq,Beq,lb,ub,[],options);
  72.  
     
  73.  
    if exitflag < 0
  74.  
     
  75.  
        disp('没有合适整数解');
  76.  
     
  77.  
        x = x0;
  78.  
     
  79.  
        fval = fval0;
  80.  
     
  81.  
        status = exitflag;
  82.  
     
  83.  
        return;
  84.  
     
  85.  
    else
  86.  
     
  87.  
        %采用分支定界法求解
  88.  
     
  89.  
        bound = inf;
  90.  
     
  91.  
        [x,fval,status] = branchbound(f,A,B,I,x0,fval0,bound,Aeq,Beq,lb,ub,e);
  92.  
     
  93.  
    end
  94.  
     
  95.  
     
  96.  
     
  97.  
    子函数
  98.  
     
  99.  
    function [newx,newfval,status,newbound] = branchbound(f,A,B,I,x,fval,bound,Aeq,Beq,lb,ub,e)
  100.  
     
  101.  
     
  102.  
     
  103.  
    % 分支定界法求解整数规划
  104.  
     
  105.  
    % f,A,B,Aeq,Beq,lb,ub与线性规划相同
  106.  
     
  107.  
    % I为整数限制变量的向量
  108.  
     
  109.  
    % x为初始解,fval为初始值
  110.  
     
  111.  
    options = optimset('display','off');
  112.  
     
  113.  
    [x0,fval0,status0]=linprog(f,A,B,Aeq,Beq,lb,ub,[],options);
  114.  
     
  115.  
     
  116.  
     
  117.  
    %递归中的最终退出条件
  118.  
     
  119.  
    %无解或者解比现有上界大则返回原解
  120.  
     
  121.  
    if status0 <= 0 || fval0 >= bound
  122.  
     
  123.  
        newx = x;
  124.  
     
  125.  
        newfval = fval;
  126.  
     
  127.  
        newbound = bound;
  128.  
     
  129.  
        status = status0;
  130.  
     
  131.  
        return;
  132.  
     
  133.  
    end
  134.  
     
  135.  
     
  136.  
     
  137.  
    %是否为整数解,如果是整数解则返回
  138.  
     
  139.  
    intindex = find(abs(x0(I) - round(x0(I))) > e);
  140.  
     
  141.  
    if isempty(intindex)
  142.  
     
  143.  
        newx(I) = round(x0(I));
  144.  
     
  145.  
        newfval = fval0;
  146.  
     
  147.  
        newbound = fval0;
  148.  
     
  149.  
        status = 1;
  150.  
     
  151.  
        return;
  152.  
     
  153.  
    end
  154.  
     
  155.  
     
  156.  
     
  157.  
    %当有非整可行解时,则进行分支求解
  158.  
     
  159.  
    %此时必定会有整数解或空解
  160.  
     
  161.  
    %找到第一个不满足整数要求的变量
  162.  
     
  163.  
    n = I(intindex(1));
  164.  
     
  165.  
    addA = zeros(1,length(f));
  166.  
     
  167.  
    addA(n) = 1;
  168.  
     
  169.  
    %构造第一个分支 x<=floor(x(n))
  170.  
     
  171.  
    A = [A;addA];
  172.  
     
  173.  
    B = [B,floor(x(n))];
  174.  
     
  175.  
    [x1,fval1,status1,bound1] = branchbound(f,A,B,I,x0,fval0,bound,Aeq,Beq,lb,ub,e);
  176.  
     
  177.  
    A(end,:) = [];
  178.  
     
  179.  
    B(:,end) = [];
  180.  
     
  181.  
    %解得第一个分支,若为更优解则替换,若不是则保持原状
  182.  
     
  183.  
     
  184.  
     
  185.  
    status = status1;
  186.  
     
  187.  
    if status1 > 0 && bound1 < bound
  188.  
     
  189.  
        newx = x1;
  190.  
     
  191.  
        newfval = fval1;
  192.  
     
  193.  
        bound = fval1;
  194.  
     
  195.  
        newbound = bound1;
  196.  
     
  197.  
    else
  198.  
     
  199.  
        newx = x0;
  200.  
     
  201.  
        newfval = fval0;
  202.  
     
  203.  
        newbound = bound;
  204.  
     
  205.  
    end
  206.  
     
  207.  
     
  208.  
     
  209.  
    %构造第二分支
  210.  
     
  211.  
    A = [A;-addA];
  212.  
     
  213.  
    B = [B,-ceil(x(n))];
  214.  
     
  215.  
    [x2,fval2,status2,bound2] = branchbound(f,A,B,I,x0,fval0,bound,Aeq,Beq,lb,ub,e);   
  216.  
     
  217.  
    A(end,:) = [];
  218.  
     
  219.  
    B(:,end) = [];
  220.  
     
  221.  
     
  222.  
     
  223.  
    %解得第二分支,并与第一分支做比较,如果更优则替换
  224.  
     
  225.  
    if status2 > 0 && bound2 < bound
  226.  
     
  227.  
        status = status2;
  228.  
     
  229.  
        newx = x2;
  230.  
     
  231.  
        newfval = fval2;
  232.  
     
  233.  
        newbound = bound2;
  234.  
     
  235.  
    end
学新通

②模型求解

利用上述指令求解下列问题:

汽车厂生产三种类型的汽车,已知各类型每辆车对钢材、劳动时间的需求,利润及工厂每月的现有量

 

小型

中型

大型

现有量

钢材(吨)

1

2

5

1000

劳动时间(小时)

250

125

150

120000

利润(万元)

3

5

12

 

1、若每月生产的汽车必须为整车,试制订月生产计划,使工厂的利润最大?

  1.  
    f = [-3 -5 -12];
  2.  
    A = [1 2 5;250 125 150];
  3.  
    B = [1000 120000];
  4.  
    I = [1:length(f)];
  5.  
    lb = [0 0 0];
  6.  
    [x,fval,status] = intprog(f,A,B,I,[],[],lb)

答案为 x =307   344     1     fval = -2653      status =1

2、如果生产某一类型汽车,则至少要生产50辆,那么最优的生产计划应作何改变?

lb = [50 50 50]

答案为  x =350   200    50     fval =-2.6500e 003     status =1

2、混合整数规划(MIP)

①matlab语法

  1.  
    x = intlinprog(f, intcon,A,b)
  2.  
    x = intlinprog(f , intcon,A,b,Aeq, beq)
  3.  
    X=intlinprog(f , intcon, A, b, Aeq, beq,1b,ub)
  4.  
    x = intlinprog(f, intcon,A, b,Aeq, beq, lb, ub,x0)
  5.  
    x = intlinprog(f, intcon, A, b,Aeq, beq,lb, ub, x0, options)
  6.  
    x = intlinprog(problem)
  7.  
    [x, fval, exitflag,output] = intlinprog(__)

f、x、intcon、lb、beq、Ib和ub是向量,A和Aeq是矩阵

②模型案例

学新通

  1.  
    f = [8;1];%确定目标函数系数
  2.  
    intcon = 2;%理解为两个受x受到整数限制
  3.  
    A = [-1,-2;
  4.  
    -4,-1;
  5.  
    2,1];%构造不不等式左边系数矩阵
  6.  
    b = [14;-33;20];%构造不等式右边矩阵
  7.  
    x = intlinprog(f,intcon,A,b)

 学新通

  1.  
    %案例二
  2.  
    clear all
  3.  
    clc
  4.  
    % 编写目标函数向量和由整数变量组成的向量。
  5.  
    f = [-3;-2;-1];
  6.  
    intcon = 3;
  7.  
    % 编写线性不等式约束。
  8.  
    A = [1,1,1];
  9.  
    b = 7;
  10.  
    % 编写线性等式约束。
  11.  
    Aeq = [4,2,1];
  12.  
    beq = 12;
  13.  
    % 编写边界约束。
  14.  
    lb = zeros(3,1);%等效于lb=[0;0;0]
  15.  
    ub = [Inf;Inf;1]; %强制x(3)为一个固定1
  16.  
    %调用intlinprog
  17.  
    x = intlinprog(f,intcon,A,b,Aeq,beq,lb,ub)
学新通

当x2 = 5 , x3 = 1 , x1 = 0 最值为−12 

3、0-1规划

①应用范围

0-1线性规划模型一般被用于指派问题上面

②案例分析

 [x,f]= L01p_e(c,A,b,N)用枚举法求解下列
  0-1线性规划问题
 min f=c'*x, s.t. A*x<=b,x的分量全为整数0或1,
 其中N表示约束条件 Ax ≤ b中的前N个是等式,N= 0时可以省略。
 返回结果x是最优解,f是最优解处的函数值。
  
例 max f=3x1 5x2 2x3 4x4 2x5 3x6
 s.t. 8x1 13x2 6x3 9x4 5x5 7x6<=24, x1,…,x6均为0或1
求解
c=-[3,5,2,4,2,3];a=[8,13,6,9,5,7];b=24;
x=L01p_e(c,a,b)

L01p_e(c,a,b)

③matlab代码如下:

  1.  
    function [x,f]=L01p_e(c,A,b,N)
  2.  
    if nargin<4,N=0;end
  3.  
    c=c(:);b=b(:);
  4.  
    [m,n]=size(A);x=[];f=abs(c')*ones(n,1);i=1;
  5.  
    while i<=2^n
  6.  
    B=de2bi(i-1,n)';
  7.  
    t=A*B-b;t11=find(t(1:N,:)~=0);
  8.  
    t12=find(t(N 1:m,:)>0);t1=[t11;t12];
  9.  
    if isempty(t1)
  10.  
    f=min([f,c'*B]);
  11.  
    if c'*B==f,x=B;end
  12.  
    end
  13.  
    i=i 1;
  14.  
    end

学新通

0-1线性规划和整数规划的示例

 学新通

  1.  
     f=[-6,-2,-3,-5];
  2.  
    A=[-3,5,-1,-6;1,1,1,-1;1,2,4,5;];
  3.  
    b=[-4,3,10];
  4.  
    intcon=[1,2,3,4];
  5.  
    lb=zeros(4,1);
  6.  
    ub=ones(4,1);
  7.  
    [x,y]=intlinprog(f,intcon,A,b,[],[],lb,ub);
  8.  
    x,y=-y
  9.  
    plot(x,'--ok');

结果为:

学新通

三、其他分类方法

学新通

1、单目标规划与多目标规划

①理想点法

 学新通

 学新通

学新通

 ②线性加权和法

学新通

 ③最大最小值法

学新通

 ④目标规划法

学新通

 ⑤模糊数学求解方法

学新通

学新通

2、动态规划与静态规划

①动态规划思路

1、找到状态和选择,确定当前状态和转换

2、明确dp数组/或函数的定义,即dp数组保存了啥信息(dp数组一般是一维或二维)

3、寻找状态之间的关系,当前状态如何根据上一状态和一些已知信息得到(状态转换方程)

②最短路径规划

  1.  
    import matplotlib.pyplot as plt
  2.  
    import pylab as pl
  3.  
    import connmysql
  4.  
    import pandas as pd
  5.  
     
  6.  
    sql2 = "SELECT id, distance,duration FROM trafic"
  7.  
    checklist = connmysql.getdata(sql2)
  8.  
    ids=[]
  9.  
    for i in range(0,len(checklist)):
  10.  
    ids.append(checklist[i][0])
  11.  
    time_dataframe = pd.DataFrame(columns=['distance','duration'], index=ids)
  12.  
    # print(time_dataframe)
  13.  
    for i in range(0,len(checklist)):
  14.  
    id=checklist[i][0]
  15.  
    time_dataframe.at[ids[i],'distance'] = float(checklist[i][1])#distance
  16.  
    time_dataframe.at[ids[i], 'duration'] = float(checklist[i][2] ) # distance
  17.  
    # id='100001-100002'
  18.  
    # print(time_dataframe.at[id,'distance'])
  19.  
    # print(time_dataframe.at['100001-100002','duration'])
  20.  
    # list=['100002','100003','100004','100005','100006']
  21.  
    #基于动态规划求得最短路径,计算量会比较小,速度较快
  22.  
    list = ['100002', '100003', '100004', '100005', '100006']
  23.  
    # 基于动态规划求得最短路径,计算量会比较小,速度较快
  24.  
    routelist=[]
  25.  
    route_distance=[]
  26.  
    for j in range(0,len(list)-1):
  27.  
    print('mm',j)
  28.  
    print('he1', routelist)
  29.  
    print('he2', route_distance)
  30.  
    ids = []
  31.  
    distances, routes = {}, {}
  32.  
    for i in range(0, len(list)):
  33.  
    if len(routelist)==0:#当里面还没有目标在时
  34.  
    id = list[0] '-' list[i]
  35.  
    if list[i]!=list[0]:
  36.  
    ids.append(id)
  37.  
    else:
  38.  
    if list[i] not in routelist :#计算过的点不再重复计算
  39.  
    id = routelist[j] '-' list[i]
  40.  
    ids.append(id)
  41.  
    print('he3',ids)
  42.  
    for k in range(0, len(ids)):
  43.  
    distances[ids[k]] = time_dataframe.at[ids[k], 'distance']
  44.  
    print('he4',distances)
  45.  
    route1 = sorted(distances.items(), key=lambda item: item[1]) # 将最小距离取出来
  46.  
    route_distance.append(route1[0])
  47.  
    # routes[route1[0][0]] = route1[0][1] # key:100002-100006,values: 3929.0,,保存离最后一个点的最优路线
  48.  
    print('he5',route1)
  49.  
    a=route1[0][0].split('-')
  50.  
    if a[0] not in routelist:
  51.  
    routelist.append(a[0])
  52.  
    if a[1] not in routelist:
  53.  
    routelist.append(a[1])
  54.  
    print('he6', routelist)
  55.  
    print('he',routelist)
  56.  
     
学新通

3、随机规划与确定规划

①随即规划

运用随机动态规划的分析方法,求解随机动态规划模型的最优解是一种比较常见的数学建模问题。例如,在实际应用中,经常会遇到某些多阶段决策过程中出现随机因素的情况,而动态规划的方法也可以处理这种随机性问题。

②案例分析

学新通

 分析并假设

此问题中价格是一个随机变量,是按照某种已知的概率分布规律取值的。可以将采购期限内的5周看做5个阶段(即需要每周做一次决策,自然也可以每天做一次决策而将之更加细致地分为35个阶段,则问题便成了在每个阶段进行决策是否购进原料,以期使原料的采购价格的期望值达到最小。

在实际应用中,经常会遇到某些多阶段决策过程中出现随机因素的情况。用动态规划的方法也可以处理这种随机性问题。不过此时状态转移不能完全确定,而是按照某种已知的概率分布取值,具有这种性质的多阶段决策过程就称之为随机性的决策过程,此时运用的动态规划也就相应的被称为随机动态规划。

学新通 学新通

 模型的建立和求解学新通

 学新通

 学新通

 学新通

学新通 学新通

 学新通

 结论与分析

 由以上逆推计算得结果可知,最优的采购策略序列为{,,,,}u1u2u3u4u5。根据u1,u2,3u的表达式可知,在第1、2、3周时,若价格为500时,就应采购;而在价格为600或者700时则应采取等待观望的态度。

由u4的表达式得,在第4周,若价格为500或者600时就应该采购,而在价格为700时则等待观望。

若在前4周都采取了等待观望策略,则在第5周,无论什么价格都必须采购(u5=1)。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgcajkf
系列文章
更多 icon
同类精品
更多 icon
继续加载