求取需求量的函数部分有一些问题,如何使得能够按照概率产生需求量

最好给出代码和运行结果,一会就要上课讲了,急

img

img

img


 #include 
#include 
double function(double q);
int main()
{
    int Q=3000,T=3,d=1000,s=2,N=36500;
    int K=N,I=0,C=0,flag=0;
    while(flag==0)//当运送的时间间隔大于模拟中剩下的天数时,才进行运送货物 
       {
           for(int i=1;i<=N;i+=T)//每T天进行一次货物运输 
           {
           I=I+Q; 
           C=C+d;//计算进货后的存储量,计算此次进货的费用 
           for(int j=1;j<=T;j++)//在一个周期内进行存储量总费用的计算 
           {
               double q=rand()/(RAND_MAX+1.0); 
             double qi;
             qi=function(q);//需求量 
             I=I-qi;//库存量 
             if(I<=0)
               I=0;
             else//还有库存时需要进行存储费用的计算 
              C=C+I*s;
            } 
            K=K-T; 
            if(T==K)//如果运送时间间隔等于模拟中剩下的天数,无需进货 
           {
             flag==1; 
             break; 
           } 
       }
        printf("%lf",C*1.0/N); 
        return 0; 
        }
 
}
double function(double q)
{
    double qi;
if(q>=0&&q<0.01)
    qi = (q+0.2)*5000;
else if(q>=0.01&&q<0.03)
    qi = (q+0.2)*5000;
else if(q>=0.03&&q<0.08  )  
    qi = (q+0.545)*2000;
else if(q>=0.08&&q<0.20)
    qi = (q+1.42)*833.33;
else if(q>=0.20&&q<0.40)
    qi = (q+2.5)*500;
else if(q>=0.40&&q<0.67)
    qi = (q+3.515)*370.37;
else if(q>=0.67&&q<0.85)
    qi = (q+2.12)*555.55;
else if(q>=0.85&&q<0.93) 
    qi = (q+0.47)*1250;      
else if(q>=0.93&&q<0.97) 
    qi = (q-0.23)*2500; 
else
    qi= (q-0.6)*5000;
return qi;
}

基于new BIng的修改:
您可以通过修改function函数来按照概率产生需求量。您可以使用累积分布函数(CDF)来实现这一点。根据您之前提供的需求量和出现概率的数据,我们可以计算出每个需求量的累积概率。然后,我们可以使用随机数q来确定需求量。

下面是一个修改后的function函数,它使用累积分布函数来按照概率产生需求量:

#include <stdio.h>
#include <stdlib.h>
double function(double q);
int main()
{
    int Q=3000,T=3,d=1000,s=2,N=36500;
    int K=N,I=0,C=0,flag=0;
    while(flag==0)//当运送的时间间隔大于模拟中剩下的天数时,才进行运送货物 
       {
           for(int i=1;i<=N;i+=T)//每T天进行一次货物运输 
           {
           I=I+Q; 
           C=C+d;//计算进货后的存储量,计算此次进货的费用 
           for(int j=1;j<=T;j++)//在一个周期内进行存储量总费用的计算 
           {
               double q=rand()/(RAND_MAX+1.0); 
             double qi;
             qi=function(q);//需求量 
             I=I-qi;//库存量 
             if(I<=0)
               I=0;
             else//还有库存时需要进行存储费用的计算 
              C=C+I*s;
            } 
            K=K-T; 
            if(T==K)//如果运送时间间隔等于模拟中剩下的天数,无需进货 
           {
             flag==1; 
             break; 
           } 
       }
        printf("%lf",C*1.0/N); 
        return 0; 
        }
 
}


double function(double q)
{
    double qi;
    if (q >= 0 && q < 0.01)
        qi = 1049.5;
    else if (q >= 0.01 && q < 0.03)
        qi = 1149.5;
    else if (q >= 0.03 && q < 0.08)
        qi = 1249.5;
    else if (q >= 0.08 && q < 0.20)
        qi = 1349.5;
    else if (q >= 0.20 && q < 0.47)
        qi = 1449.5;
    else if (q >= 0.47 && q < 0.74)
        qi = 1549.5;
    else if (q >= 0.74 && q < 0.92)
        qi = 1649.5;
    else if (q >= 0.92 && q < 1)
        qi = 1749.5;
    else
        qi = 1849.5;
    return qi;
}

img


不知道是否符合正确

不提前备课,现在搞这些