用matlab计算2.一个车间内有10台相同的车床,每台车床运行时每小时创造40元的利润,且平均每小时损坏一次。而一位修理工修复一台车床平均需要4小时。以上时间均服从指数分布。设一位修理工每小时工资为60元,试求: (1)该车间应设多少名修理工,使总费用最小? (2)若要求不能运转的车床的期望数小于4台,则应设多少名修理工? (3)若要求损坏机器等待修理的时间少于4小时,又应设多少名修理工?
时间: 2024-03-04 09:49:25 浏览: 22
1. 该车间应设多少名修理工,使总费用最小?
设该车间设 $n$ 名修理工,则每小时总利润为 $40\times 10=400$ 元。由题意,每台车床每小时损坏的次数服从参数为 $\lambda=1$ 的指数分布,每位修理工修复一台车床的时间服从参数为 $\mu=4$ 的指数分布,因此每台车床等待修理的时间也服从参数为 $\mu=4$ 的指数分布。
设 $X_i$ 表示第 $i$ 台车床等待修理的时间,则 $X_i$ 服从参数为 $\mu=4$ 的指数分布。设 $Y$ 表示所有车床等待修理的总时间,则 $Y=\sum_{i=1}^{10}X_i$,因此 $Y$ 服从参数为 $\lambda=10$,$\mu=40$ 的 Erlang 分布。
设 $C_n$ 表示设 $n$ 名修理工时的总费用,则有
$$
C_n=60n+\frac{400n}{n+\lambda\mu}
$$
其中第一项为修理工的工资,第二项为每小时的总利润除以平均每小时的总修理时间。
为了使总费用最小,需要对 $C_n$ 求导数,令其等于0,解出最优的 $n$。具体地,有
$$
\frac{dC_n}{dn}=\frac{400\lambda\mu^2}{(n+\lambda\mu)^2}-\frac{400\lambda\mu}{n+\lambda\mu}=\frac{400\lambda\mu(n-\lambda\mu)}{(n+\lambda\mu)^2}=0
$$
因此,$n=\lambda\mu=4$ 时总费用最小,此时总费用为
$$
C_4=60\times 4 + \frac{400\times 4}{4+10\times 40}=640
$$
因此,该车间应设 4 名修理工,这样总费用最小。
在 MATLAB 中,可以使用以下代码计算:
```matlab
lambda = 1; % 每台车床每小时损坏的次数
mu = 4; % 每位修理工修复一台车床的时间
n = 1:10; % 修理工数量
Cn = 60*n + 400*n./(n+lambda*mu); % 总费用
[minC, idx] = min(Cn); % 最小总费用及对应的修理工数量
fprintf('该车间应设 %d 名修理工,总费用为 %.2f 元\n', n(idx), minC);
```
2. 若要求不能运转的车床的期望数小于 4 台,则应设多少名修理工?
设 $X_i$ 表示第 $i$ 台车床等待修理的时间,$I_i$ 表示第 $i$ 台车床是否在 $t$ 时刻不能运转,则 $I_i$ 是一个 0/1 随机变量,其取值为 1 表示该车床在 $t$ 时刻不能运转,取值为 0 表示该车床在 $t$ 时刻能够运转。由题意,$I_i$ 服从参数为 $\lambda=1$ 的泊松分布。因此,车间内不能运转的车床的数量 $N_t=\sum_{i=1}^{10}I_i$ 服从参数为 $\lambda=10$ 的泊松分布。
设 $C_n$ 表示设 $n$ 名修理工时的总费用,则有
$$
C_n=60n+\frac{400n}{n+\lambda\mu}+\mathbb{P}(N_t<4)\times 2000
$$
其中第一项为修理工的工资,第二项为每小时的总利润除以平均每小时的总修理时间,第三项为期望不能运转的车床数小于 4 台时的惩罚成本,即需要乘以一个系数 2000。
为了使总费用最小,需要对 $C_n$ 求导数,令其等于0,解出最优的 $n$。具体地,有
$$
\frac{dC_n}{dn}=\frac{400\lambda\mu^2}{(n+\lambda\mu)^2}-\frac{400\lambda\mu}{n+\lambda\mu}+\frac{d}{dn}\mathbb{P}(N_t<4)\times 2000=0
$$
因此,需要求出 $\mathbb{P}(N_t<4)$ 对 $n$ 的导数。由于 $\mathbb{P}(N_t<4)$ 是一个分段函数,可以分别计算其在各个区间内的导数:
当 $n+\lambda\mu\leq 4$ 时,有 $\mathbb{P}(N_t<4)=1$,因此
$$
\frac{d}{dn}\mathbb{P}(N_t<4)=0
$$
当 $n+\lambda\mu>4$ 时,有 $\mathbb{P}(N_t<4)=\sum_{k=0}^{3}\frac{(\lambda\mu)^k}{k!}e^{-\lambda\mu}$,因此
$$
\frac{d}{dn}\mathbb{P}(N_t<4)=\frac{d}{dn}\sum_{k=0}^{3}\frac{(\lambda\mu)^k}{k!}e^{-\lambda\mu}=-\frac{4(\lambda\mu)^3}{(n+\lambda\mu)^4}e^{-\lambda\mu}
$$
将以上导数带入 $C_n$ 的导数中,有
$$
\frac{dC_n}{dn}=\frac{400\lambda\mu(n-\lambda\mu)}{(n+\lambda\mu)^2}-\frac{400\lambda\mu}{n+\lambda\mu}+\frac{d}{dn}\mathbb{P}(N_t<4)\times 2000=-\frac{800\lambda\mu(\lambda\mu-n)(n-2\lambda\mu)}{(n+\lambda\mu)^3}+2000\frac{4(\lambda\mu)^3}{(n+\lambda\mu)^4}e^{-\lambda\mu}=0
$$
因此,需要使用数值方法求解方程 $f(n)=0$,其中 $f(n)$ 为上式左边的函数即可。
在 MATLAB 中,可以使用以下代码计算:
```matlab
lambda = 1; % 每台车床每小时损坏的次数
mu = 4; % 每位修理工修复一台车床的时间
n = 1:10; % 修理工数量
Cn = zeros(size(n)); % 总费用
for i = 1:numel(n)
Cn(i) = 60*n(i) + 400*n(i)/(n(i)+lambda*mu) + (poisscdf(3, lambda*mu)*2000);
end
[minC, idx] = min(Cn); % 最小总费用及对应的修理工数量
fprintf('该车间应设 %d 名修理工,总费用为 %.2f 元\n', n(idx), minC);
```
3. 若要求损坏机器等待修理的时间少于 4 小时,又应设多少名修理工?
设 $X_i$ 表示第 $i$ 台车床等待修理的时间,则 $X_i$ 服从参数为 $\mu=4$ 的指数分布。设 $C_n$ 表示设 $n$ 名修理工时的总费用,则有
$$
C_n=60n+\frac{400n}{n+\lambda\mu}+\mathbb{P}(\max_{i=1}^{10}X_i<4)\times 2000
$$
其中第一项为修理工的工资,第二项为每小时的总利润除以平均每小时的总修理时间,第三项为要求损坏机器等待修理的时间少于 4 小时的惩罚成本,即需要乘以一个系数 2000。
由于 $X_i$ 服从参数为 $\mu=4$ 的指数分布,因此 $\max_{i=1}^{10}X_i$ 服从参数为 $\mu=4/\ln 10$ 的对数正态分布。设 $Y=\max_{i=1}^{10}X_i$,则可以使用 MATLAB 中的 lognstat 函数计算 $Y$ 的均值和标准差。
设 $f_n$ 表示 $\mathbb{P}(\max_{i=1}^{10}X_i<4)$,则有
$$
f_n=\prod_{i=1}^{10}\mathbb{P}(X_i<4)=\prod_{i=1}^{10}(1-e^{-\frac{4}{\mu}})=\left(1-e^{-\frac{4}{\mu}}\right)^{10}
$$
因此,有
$$
C_n=60n+\frac{400n}{n+\lambda\mu}+\left(1-e^{-\frac{4}{\mu}}\right)^{10}\times 2000
$$
为了使总费用最小,需要对 $C_n$ 求导数,令其等于0,解出最优的 $n$。具体地,有
$$
\frac{dC_n}{dn}=\frac{400\lambda\mu^2}{(n+\lambda\mu)^2}-\frac{400\lambda\mu}{n+\lambda\mu}-\frac{10\ln(1-e^{-\frac{4}{\mu}})e^{-\frac{4}{\mu}}\left(1-e^{-\frac{4}{\mu}}\right)^9}{n+\lambda\mu}=0
$$
因此,需要使用数值方法求解方程 $f(n)=0$,其中 $f(n)$ 为上式左边的函数即可。
在 MATLAB 中,可以使用以下代码计算:
```matlab
lambda = 1; % 每台车床每小时损坏的次数
mu = 4; % 每位修理工修复一台车床的时间
n = 1:10; % 修理工数量
Cn = zeros(size(n)); % 总费用
for i = 1:numel(n)
Cn(i) = 60*n(i) + 400*n(i)/(n(i)+lambda*mu) + (1 - logncdf(4, log(mu/10), sqrt(2*log(10))))^10*2000;
end
[minC, idx] = min(Cn); % 最小总费用及对应的修理工数量
fprintf('该车间应设 %d 名修理工,总费用为 %.2f 元\n', n(idx), minC);
```