⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 expi.m

📁 计算机仿真 报童问题的matlab实现
💻 M
字号:
%报童问题(负指数分布)%几个参数:%卖出报纸挣a元,退回报纸赔b元;%卖报量y,订报量z,订报量上限z_up;%观察期的总天数t,用于积累天数的ti;%总的平均损失量ave_loss,供过于求损失loss1,供小于求损失loss2,ave_loss=loss1+loss2;%最佳订报量superz,最小损失量ave_loss_min;function [superz,ave_loss_min]=expi(t,z_up,a,b)    mu=input('输入负指数分布的参数mu');                 %输入负指数分布的参数mu,默认为1000    if isempty(mu)         mu=1000;    end    y=round((exprnd(mu,1,t)));                         %生成最大订报量以内的均匀随机卖报量y(矢量)    ave_loss=zeros(1,z_up);                            %各种订报量情况下的平均损失统计(z_up个元素的矢量)     for z=1:z_up                                      %外层循环,z_up种情况,各种订报量         loss1=0;         loss2=0;        for ti=1:t                                     %内层循环,一共实验多少天          if z>y(ti)                                   %如果供大于求,说明要退报,赔钱               loss1=loss1+b*(z-y(ti));          elseif z<y(ti)                               %如果供小于求,说明还可以赚钱,报纸不够,少赚了钱               loss2=loss2+a*(y(ti)-z);          else                                         %如果订报量与卖报量相同,损失不变              loss1=loss1;              loss2=loss2;              end        end         ave_loss(z)=(loss1+loss2)/t;                  %求每天的平均损失量     end     ave_loss_min=min(ave_loss)                        %显示最后的平均最小损失     superz=find(ave_loss==ave_loss_min)               %记录在给定a和给定b条件下的最佳订报量          figure(1)                                         %画给定a和b的时候的最佳订报量和最小平均损失关系曲线     plot(1:z_up,ave_loss,'b')     grid on     axis([0,1000,0,300])     xlabel('订报量/份')     ylabel('亏损/元')     title('亏损与订报量的关系曲线')           figure(2)                                        %画每份报纸收益与最佳订报量的关系曲线     z_a=zeros(1,100);     n1=1;     for a_temp=0:0.01:1                               %收益a由0元递增至1元         for z=1:z_up                                  %外层循环,z_up种情况,各种订报量           loss1=0;           loss2=0;              for ti=1:t                                  %内层循环,一共实验多少天            if z>y(ti)                                 %如果供大于求,说明要退报,赔钱               loss1=loss1+b*(z-y(ti));            elseif z<y(ti)                             %如果供小于求,说明还可以赚钱,报纸不够,少赚了钱               loss2=loss2+a_temp*(y(ti)-z);            else                                       %如果订报量与卖报量相同,损失不变              loss1=loss1;              loss2=loss2;            end        end         ave_loss(z)=(loss1+loss2)/t;                  %计算平均损失       end     ave_loss_min=min(ave_loss);     z_a(n1)=find(ave_loss==ave_loss_min,1,'first');   %将每种a的最佳订报量放入z_a矢量      n1=n1+1;     end     a_temp=[0:0.01:1];     plot(a_temp,z_a,'b')     grid on     axis([0,1,0,1000])     xlabel('每份报纸净赚/元')     ylabel('最佳订报量/份')     title('每份报纸净赚与最佳订报量的关系曲线')          figure(3)                                         %每份报纸赔偿与最佳订报量的关系曲线     z_b=zeros(1,100);     n2=1;     for b_temp=0:0.01:1                               %赔偿b由0元递增至1元         for z=1:z_up                                  %外层循环,z_up种情况,各种订报量           loss1=0;           loss2=0;              for ti=1:t                                  %内层循环,一共实验多少天            if z>y(ti)                                 %如果供大于求,说明要退报,赔钱               loss1=loss1+b_temp*(z-y(ti));            elseif z<y(ti)                             %如果供小于求,说明还可以赚钱,报纸不够,少赚了钱               loss2=loss2+a*(y(ti)-z);            else                                       %如果订报量与卖报量相同,损失不变              loss1=loss1;              loss2=loss2;            end        end         ave_loss(z)=(loss1+loss2)/t;                  %计算平均损失       end     ave_loss_min=min(ave_loss);     z_b(n2)=find(ave_loss==ave_loss_min,1,'first');    %将每种赔偿b的最佳订报量放入z_b矢量        n2=n2+1;     end     b_temp=[0:0.01:1];     plot(b_temp,z_b,'b')     grid on     axis([0,1,0,1000])     xlabel('每份报纸赔偿/元')     ylabel('最佳订报量/份')     title('每份报纸赔偿与最佳订报量的关系曲线')end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -