数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
查看: 2525|回复: 6

我的b题答案(详细),各位高手也都写下来看看。

[复制链接]
发表于 2004-9-21 11:08:49 | 显示全部楼层 |阅读模式
<>第一问: 根据表一的数据规律,先由一次线形回归找出哪些机组和线路有线形关系,(需要剔除一些系数)然后,用它的结果再进行多元线形回归分析,得出表达式。</P>
<>第二问:标准不同,规则也不同,再次不再叙述。</P>
<>第三问:考虑爬坡速率,考虑费用最小,不考虑阻塞:得出的答案为</P>
<P>清算价,303</P>
<P>方案 153.0 79.0 180.0 99.5 125.0 140.0 95.0 110.9 </P>
<P>第四问:建立非线形优化模型,得出没有超出限值,然后再对模型优化,在满足上面模型基础上,费用最小:</P>
<P>153.0000   87.6933 228.000 80.481 152  95  69.2256</P>
<P>此时清算价  510</P>
<P>第五问: 按三规则,得 </P>
<P>方案 153.0  81 215.2  99.5  135.0 150.0 102.1 117.0
清算价</P>
<P>356</P>
<P>按四规则,发生阻塞,但没超过裕度‘</P>
<P>如果只考虑超出限度百分比最小,则有</P>
<P>153.0000   88.0000  228.0000  87.9081  152.0000  136.9149   89.9770  117.0000</P>
<P>此时清算价510</P>

<P>如果既考虑安全,又要考虑费用,则</P>
<P>153.0000  88.0000  228.0000  92.0149  135.0000  145.5644  94.2207  117.0000</P>

<P>清算价</P>
<P>495</P>
<P>至于阻塞费用,因为每人规则不一样,不写出来。</P>
 楼主| 发表于 2004-9-21 11:39:00 | 显示全部楼层
<>另附程序:有解释。</P><>程序一和程序二共同完成问题的第一问。
程序三能够对任意的段预报负荷,根据电力市场规则,爬坡速率等因素,给出各机组的出力分配方案。
程序四是一个优化模型,能够自动的对程序三得出的方案进行阻塞性检验,并自动在阻塞发生时,根据线路上潮流的绝对值百分比尽量小原则和经济原则,给出新的调配方案。
程序五是一个函数文件,与程序四的优化有关。
程序一:
%下面的程序是根据每四组变化的数据,通过一元线形回归,判断单个机组对单个线路的影响,然后,进行假设性检验,如果满足,则置xx相应项为0,否则为1
clear all
clc
a=[ 133.02 73 180 80 125 125 81.1 90;
129.63 73 180 80 125 125 81.1 90;
158.77 73 180 80 125 125 81.1 90;
145.32 73 180 80 125 125 81.1 90;
120 78.596 180 80 125 125 81.1 90;
120 75.45 180 80 125 125 81.1 90;
120 90.487 180 80 125 125 81.1 90;
120 83.848 180 80 125 125 81.1 90;
120 73 231.39 80 125 125 81.1 90;
120 73 198.48 80 125 125 81.1 90;
120 73 212.64 80 125 125 81.1 90;
120 73 190.55 80 125 125 81.1 90;
120 73 180 75.857 125 125 81.1 90;
120 73 180 65.958 125 125 81.1 90;
120 73 180 87.258 125 125 81.1 90;
120 73 180 97.824 125 125 81.1 90;
120 73 180 80 150.71 125 81.1 90;
120 73 180 80 141.58 125 81.1 90;
120 73 180 80 132.37 125 81.1 90;
120 73 180 80 156.93 125 81.1 90;
120 73 180 80 125 138.88 81.1 90;
120 73 180 80 125 131.21 81.1 90;
120 73 180 80 125 141.71 81.1 90;
120 73 180 80 125 149.29 81.1 90;
120 73 180 80 125 125 60.582 90;
120 73 180 80 125 125 70.962 90;
120 73 180 80 125 125 64.854 90;
120 73 180 80 125 125 75.529 90;
120 73 180 80 125 125 81.1 104.84;
120 73 180 80 125 125 81.1 111.22;
120 73 180 80 125 125 81.1 98.092;
120 73 180 80 125 125 81.1 120.44];
b=[165.81 140.13 -145.14 118.63 135.37 160.76
165.51 140.25 -144.92 118.7 135.33 159.98
167.93 138.71 -146.91 117.72 135.41 166.81
166.79 139.45 -145.92 118.13 135.41 163.64
164.94 141.5 -143.84 118.43 136.72 157.22
164.8 141.13 -144.07 118.82 136.02 157.5
165.59 143.03 -143.16 117.24 139.66 156.59
165.21 142.28 -143.49 117.96 137.98 156.96
167.43 140.82 -152.26 129.58 132.04 153.6
165.71 140.82 -147.08 122.85 134.21 156.23
166.45 140.82 -149.33 125.75 133.28 155.09
165.23 140.85 -145.82 121.16 134.75 156.77
164.23 140.73 -144.18 119.12 135.57 157.2
163.04 140.34 -144.03 119.31 135.97 156.31
165.54 141.1 -144.32 118.84 135.06 158.26
166.88 141.4 -144.34 118.67 134.67 159.28
164.07 143.03 -140.97 118.75 133.75 158.83
164.27 142.29 -142.15 118.85 134.27 158.37
164.57 141.44 -143.3 119 134.88 158.01
163.89 143.61 -140.25 118.64 133.28 159.12
166.35 139.29 -144.2 119.1 136.33 157.59
165.54 140.14 -144.19 119.09 135.81 157.67
166.75 138.95 -144.17 119.15 136.55 157.59
167.69 138.07 -144.14 119.19 137.11 157.65
162.21 141.21 -144.13 116.03 135.5 154.26
163.54 141 -144.16 117.56 135.44 155.93
162.7 141.14 -144.21 116.74 135.4 154.88
164.06 140.94 -144.18 118.24 135.4 156.68
164.66 142.27 -147.2 120.21 135.28 157.65
164.7 142.94 -148.45 120.68 135.16 157.63
164.67 141.56 -145.88 119.68 135.29 157.61
164.69 143.84 -150.34 121.34 135.12 157.64];
k=0
xx=zeros(6,8);
for i= 1:6
for j = 1 :8
    al=ones(4,2);
    al(:,2)=a(4*j-3:4*j,j);%产生一个4行2列的矩阵,这里的第一列为1,第二列为矩阵a的变化的那些数据,每4个为一组。
    [bb,bint,r,rint,stats]=regress(b(4*j-3:4*j,i),al);%一元线形回归,这里的bb为回归后的系数
    if stats(3)&gt;0.05 %显著性检验,stats是用于检验回归模型的统计量,有三个数值,第一个是R2,其中R是相关系数,第二个是F统计量值,第三个是与统计量F对应的概率P,当P&lt;α时拒绝H0,回归模型成立
        
    xx(i,j)=1;%当回归不成立的时候,让这个位置的数为1,否则为0
end
end
end</P><>程序二
%%%%%%%%%%%%%%下面的是通过矩阵xx,然后去掉xx矩阵为1的相应aa那一列回归矩阵的系数,然后进行线形回归,然后再进行显著性检验,得出一组线路关于机组的线形关系。总共要进行6次。
aa=ones(32,9);%产生一个1矩阵的原因是,在回归的时候,第一行是1
aa(:,2:9)=a;
a1=aa(:,1:8);%产生矩阵 a1,用以进行多元回归,求出机组分别对各个线路的线形关系
a2=a1;a2(:,4:8)=aa(:,5:9);%同上
a3=aa(:,1:7); a3(:,7)=aa(:,9);%同上
a4=a1;a4(:,7:8)=aa(:,8:9);%同上
a5=ones(32,6);a5(:,2:6)=aa(:,3:7);%同上
a6=aa(:,1:7);a6(:,7)=aa(:,8);%同上
jianyan=zeros(1,6);
[b1,bint,r,rint,stats]=regress(b(:,1),a1);%同上,调用回归的函数
if stats(3)&gt;0.05 % 进行多元线形的显著性检验,如果,不显著,或者是非线形的模型,则置jianyan(i)为1,下面的类同。
    jianyan(1)=1;
end
[b2,bint,r,rint,stats]=regress(b(:,2),a2);
if stats(3)&gt;0.05
    jianyan(2)=1;
end
[b3,bint,r,rint,stats]=regress(b(:,3),a3);
if stats(3)&gt;0.05
    jianyan(3)=1;
end
[b4,bint,r,rint,stats]=regress(b(:,4),a4);
if stats(3)&gt;0.05
    jianyan(4)=1;
end
[b5,bint,r,rint,stats]=regress(b(:,5),a5);
if stats(3)&gt;0.05
    jianyan(5)=1;
end
[b6,bint,r,rint,stats]=regress(b(:,6),a6);
if stats(3)&gt;0.05
    jianyan(6)=1;
end
程序三
%%%%%%%%%%%%%%%%%下面的程序,是针对第三问的,即通过电力交易规则,给出清算价最小的一组调配,这个程序可以对任意的段预报进行分配
clear all
clc
demand=982.4 %段预报,这里可以随便更改,也就是说,这样的话,这段程序对任意的段预报,都能给出一个方案来 ,如果取demand=1052。4的话,就是第五问的初步分配方案
a.q=[70 0 50 0 0 30 0 0 0 40  % 段容量
30 0 20 8 15 6 2 0 0 8
110 0 40 0 30 0 20 40 0 40
55 5 10 10 10 10 15 0 0 1
75 5 15 0 15 15 0 10 10 10
95 0 10 20 0 15 10 20 0 10
50 15 5 15 10 10 5 10 3 2
70 0 20 0 20 0 20 10 15 5];
zanshi=a.q;
a.p=[-505 0 124 168 210 252 312 330 363 48  %段价
-560 0 182 203 245 300 320 360 410 495
-610 0 152 189 233 258 308 356 415 500
-500 150 170 200 255 302 325 380 435 800
-590 0 116 146 188 215 250 310 396 510
-607 0 159 173 205 252 305 380 405 520
-500 120 180 251 260 306 315 335 348 548
-800 153 183 233 253 283 303 318 400 800];
biao=[120 73 180 80 125 125 81.1 90];  %当前机组出力方案
papo=[2.2 1 3.2 1.3 1.8 2 1.4 1.8]; %爬坡速度
papo=papo*15;
biaozhi=zeros(6,8);
aa.p=a.p;
aa.q=a.q;
for i=1:8
    for j=2:10
        aa.q(i,j)=aa.q(i,j)+aa.q(i,j-1);%累加段容量
    end
end
liang=0;
zu=zeros(1,8);% zu表示各机组出力分配方案
for i= 1:8
    for j=1:10
        if aa.q(i,j)&gt;=biao(i)+papo(i)
            for k= j+1:10
                a.p(i,k)=10000;%由爬坡速度,可以确定,这些段都无法达到,所以,让它的价格达到一极大的值,目的是为了在选数据的时候,选中它;
            end
        elseif aa.q(i,j)&lt;=biao(i)-papo(i)
              a.p(i,j)=-800;% 由爬坡速度,这些段也达不到,,实际上的意思,就是必定选了这些段,所以,让它的价格都取最小,表示,在选数据的时候,一定会选到它
             liang=liang+a.q(i,j);%  累加当前所有机组的出力值
              zu(i)=zu(i)+a.q(i,j);% 累加各机组的处理值
              a.q(i,j)=0;% 累加后,置其为 0,以免重复加如
              biaozhi(i,j)=1;
          end
      end
  end
   
k=0;
for i= 1:8 % 将矩阵转化为一个向量,这样易于排序,同时,保存他们的段价,段容量,行和列
    for j= 1:10
          k=k+1;
        x.p(k)=a.p(i,j);
        x.q(k)=a.q(i,j);
        x.col(k)=j;
        x.row(k)=i;
    end
end
x.p;
for i =1:80  % 进行冒泡排序
    for j= 79:-1:i
        if x.p(j+1)&lt;x.p(j)
            z=x.p(j+1);x.p(j+1)=x.p(j);x.p(j)=z;
            z=x.q(j+1);x.q(j+1)=x.q(j);x.q(j)=z;
            z=x.col(j+1);x.col(j+1)=x.col(j);x.col(j)=z;
            z=x.row(j+1);x.row(j+1)=x.row(j);x.row(j)=z;
        end
    end
end
k=0;
fa=liang;
while fa&lt;=demand % 依照价格,从低到高选取它们的段容量,这样是依照分配要经济的原则
    k=k+1;
    if aa.q(x.row(k),x.col(k))&gt;biao(x.row(k))+papo(x.row(k))  % 这里,稍微复杂点,表示,如果当前的段容量,大于当前方案与爬坡总和,那么,就只能选该段的一部分
        x.q(k)=x.q(k)-(aa.q(x.row(k),x.col(k))-biao(x.row(k))-papo(x.row(k)));
    end
       fa=fa+x.q(k);
end
for i =1:k
    if x.q(i)~=0
        biaozhi(x.row(i),x.col(i))=1;% 显示是否选中,若选的话,为 1否则为0
end
end
   biaozhi;
  x.q(k)=x.q(k)-(fa-demand);% 最后一段,可能只取部分
            
for  i= 1:8
     for j= 1:k
         if x.row(j)==i
              zu(i)=zu(i)+x.q(j);% 累加各机组出力
   end
   end
end
end
程序四
%%%%%%%下面的这段程序是通过不断的强化约束条件,使在各线路超出限制百分比尽量小的前提下,使得电力公司的出钱(包括付的电费和阻塞费用)尽量小。
%%%%%%%这个模型可以对第4问和第五问求解,只需要修改其中的几个数据和条件就可以。
yuding=zu; % yuding表示预定的方案,上面求出的结果是[150.0000   79.0000  180.0000   99.5000  125.0000  140.0000   95.0000  113.9000]
pc=x.p(k);% pc表示清算价,这里,实际等于选择的最后一个x.p
for i= 1:80
    if x.p(i)==10000  %理论上是置其为无穷大,但为了计算,用一个极大的值代替
        break
    end
end
biao=[120 73 180 80 125 125 81.1 90];
su=[2.2 1 3.2 1.3 1.8 2 1.4 1.8]*15;
x0=[120 73 180 80 125 125 81.1 90];%用constr进行非线形规划时的初始值
v1=biao-su; % x 取值的下限
v3=[153.0000   88.0000  228.0000   99.5000  152.0000  155.0000  102.1000  117.0000] %上限
options(13)=1; %表示 函数fun中,一个g函数是等式约束
m=0;
for j= i-1:-1:k
    v2=v3;
       v2(x.row(j))=aa.q(x.row(j),x.col(j)-1);%  改变约束条件
    [xx,options]=constr('fun',x0,options,v1,v2);%调用非线形规划函数
    options(8)
         if options(8)&lt;=0   % 说明此时调整后,可以不发生阻塞,如果是取预算为1052。8时,去掉这个项,也就是说,不考虑它的最优植一定得小于0,也就是说,可以发生阻塞
           %aa.p(x.row(j),x.col(j)-1)
            m=m+1;
             mubiao(m)=options(8);% 用向量mubiao保存当前约束条件下进行非先行规划时的最忧值
            fangan(m,=xx;%保存当前的分配方案
    for ii=1:8 %确定当前方案取得的最后一个段号
    Mm=0;
    for jj=1:10
        Mm=zanshi(ii,jj)+Mm;
        if(Mm&gt;xx(ii))
          n(ii)=jj;
          break
       end
   end
end
%minprice(m)=0;%存贮此时方案的清算价
minprice(m)=0;
   for ii= 1:8 %用minprice 保存当前的清算价
       if minprice(m)&lt;aa.p(ii,n(ii))
           minprice(m)=aa.p(ii,n(ii));
       end
   end
   zubu(m)=0; %存贮所有可以调配的方案取值时的阻塞补偿。
      for ii=1:8  %计算发生阻塞时调配费用,由两部分组成,序内容量和序外容量部分
             cha=yuding(ii)-xx(ii);
       if cha&gt;0  % 这表示预定比实际上的大,此时,是序内容量,下面的是求出补偿
          zubu(m)=zubu(m)+pc*cha*(1-xx(ii)/yuding(ii)); %这是由第二问得出的阻塞费用计算规则的公式
      else% 这表示预定比实际上的小,此时,是序外容量,下面的是求出补偿
          zubu(m)=zubu(m)+xx(ii)*(aa.p(ii,n(ii))-pc)*(1-yuding(ii)/xx(ii));%这是由第二问得出的阻塞费用计算规则的公式
      end
  end
   %    m
    %   pause
    end
end
xi=0;
[zongjia,xi]=min(minprice*982.4/4+zubu/4)
%这里保存了2组结果,第一组是在路超出限制比较小的情况下,电力公司的出力价钱也比较小的情况下的出力方案,第二组是在线路超出限制最小的的情况下的方案,
bilv1=mubiao(xi)%线路超出限制的比率
    xuanqufangan1= fangan(xi, %调整后的方案,
  qingsuanjia1= minprice(xi)% 清算价
   buchangjia1=zubu(xi)/4% 由于输电阻塞而补偿的价钱
    zongjia         %电力公司付的总价     
   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%下面的程序是对输电阻塞不可避免时采取的方案
   [bilv2,wei]=min(mubiao);
   bilv2
   xuanqufangan2= fangan(wei,
   qingsuanjia2=minprice(wei)
   buchangjia2=zubu(wei)/4
   zongjia2=qingsuanjia2*982.4/4+buchangjia2</P><P>程序五
function[f,g]=fun(x)  % 进行非线形优化时的目标函数和约束条件
y1=110.0164 +   0.0831* x(1)  +  0.0488*x(2)+    0.0532 *x(3)+    0.1200*x(4)+    -0.0252*x(5)+     0.1224 *x(6)+   0.1211*x(7);
y2=131.2189  + -0.0545* x(1)  +    0.1279 * x(2)  +    0.0333* x(4)  +     0.0869 * x(5)  +   -0.1124* x(6)  +    -0.0189* x(7)  +     0.0987* x(8) ;
y3=-108.3922 +  -0.0701* x(1)  +    0.0604 * x(2)  +  -0.1571* x(3)  +   -0.0101 * x(4)  +   0.1238 * x(5)  +  -0.2021* x(8)  ;
y4=78.8167 +  -0.0355* x(1)  +    -0.1046 * x(2)  +     0.2044 * x(3)  +    -0.0212* x(4)  +     -0.0130* x(5)  +      0.1467* x(7)  +      0.0753* x(8) ;
y5=131.3861    +0.2449* x(2)  +   -0.0640* x(3)  +    -0.0409 * x(4)  +   -0.0644 * x(5)  +    0.0715* x(6)  ;
y6=120.7930  +  0.2377* x(1)  +    -0.0604 * x(2)  +   -0.0780 * x(3)  +    0.0929  * x(4)  +   0.0468 * x(5)  +    0.1662* x(7) ;
f=max([y1/165-1,y2/150-1,y3/(-160)-1 ,y4/155-1,y5/132-1,y6/162-1]);
g(1)=x(1)+x(2)+x(3)+x(4)+x(5)+x(6)+x(7)+x(8)-982.4;%  这里的982。4是指预报的负荷量,对任意数据都适用。如果取它为1052。4的话,就可以得出第五问的答案
g(2)=y1-186.45;
g(3)=y2-177;
g(4)=-y3-174.4;
g(5)=y4-172.05;
g(6)=y5-151.8;
g(7)=y6-184.68;</P>
发表于 2004-9-21 18:29:25 | 显示全部楼层
<>若8条机组均不乏电,6条线因无电</P>
发表于 2004-9-21 19:01:42 | 显示全部楼层
<>我的三问和五问前部分都同你一样</P><>二,四问由于一直没搞大懂什么是阻塞费用,所以只胡乱凑了个数!</P>
发表于 2004-9-21 20:31:35 | 显示全部楼层
<>1、回归</P><>2、阻塞费用:多种算法,结果较多,但数量级不应差太远。</P><>3、排表4序,加表3量&gt;w=982.4,....</P><P>4、w=982.4时:  5555元,303,0*裕度向量,即不用裕度</P><P>5、w=1052.8时:1555元,356,0.4*裕度向量,即要用裕度</P><P>(标准的双目标最优化,安全优先,LINGO解,matlab较难,因初始点难找)</P><P>阻塞费用-----预定利润和实际利润的差(不要求精确,大体公平就行)</P>
发表于 2004-9-24 05:02:53 | 显示全部楼层
<>我真是非常的惊讶啊</P><>我们的结果和楼主的竟然一样啊</P><>我真是既惊喜有难过</P><P>如果楼主看见</P><P>请加我的QQ:414055228</P><P>大家交流一下,我是说真的啊,一样的答案!!!</P>[em07][em07]
发表于 2004-9-24 05:27:46 | 显示全部楼层

同意第一问无常项。

第一问无常项。
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2024-11-29 07:48 , Processed in 0.065425 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表