Di quanti motori dotare una barca

Di quanti motori dotare una barca

Una barca è in grado di navigare quando almeno la metà dei motori risulta funzionante. Supponiamo che ogni motore si possa guastare con probabilità pp in modo indipendente dagli altri. Per quali valori di pp un traghetto con quattro motori ha maggior probabilità di navigare di un traghetto con due motori?

Soluzione

L'idea è di trovare per quali pp si ottiene che

P(navigare avendo 4 motori)P(navigare avendo 2 motori)\mathbb{P}(\text{navigare avendo 4 motori})\geq \mathbb{P}(\text{navigare avendo 2 motori})

ovvero

P(si rompono 0, 1, o 2 motori su 4)P(si rompe 0 o 1 motore su 2) \mathbb{P}(\text{si rompono 0, 1, o 2 motori su 4})\geq \mathbb{P}(\text{si rompe 0 o 1 motore su 2})

Possiamo modellare in generale lo scenario in cui ad una barca con nn motori se ne rompano kk impiegando una variabile aleatoria XBinomiale(n,p)X\sim\text{Binomiale}(n,p) la cui densità

p(X=k)=(nk)pk(1p)nkp(X=k) = {n\choose k}p^k(1-p)^{n-k}

descrive la probabilità che di ottenere kk successi (la rottura di kk motori) nell'esecuzione di nn esperimenti aleatori (l'avere nn motori a disposizione) ciascuno dei quali può manifestare un successo con probabilità pp. In questo modo, il calcolo (2) si converte in

P(Binomiale(4,p)2)P(Binomiale(2,p)1)FBinomiale(4,p)(2)FBinomiale(2,p)(1) \mathbb{P}(\text{Binomiale}(4,p) \leq 2) \geq \mathbb{P}(\text{Binomiale}(2,p) \leq 1) \\ F_{\text{Binomiale}(4,p)}(2) \geq F_{\text{Binomiale}(2,p)}(1)

dove FX(t)F_X(t) è la funzione di ripartizione (cumulative distribution function, da cui la cdf che si vede nel codice) che descrive P(Xt)\mathbb{P}(X\leq t).

using Statistics, Distributions
using Plots
ps = range(0,1,length=1000)
p_navigare(k,p) = cdf(Binomial(k,p),div(k,2))

plot(ps,p_navigare.(2,ps), label="2 motori")
plot!(ps,p_navigare.(4,ps), label="4 motori")

Questa è quindi la formulazione più comoda per il contesto informatico; altrimenti a mano converrebbe sommare i vari valori puntuali (cioè P(X=k)\mathbb{P}(X=k)) e lavorare da quelli la disequazione. Procedendo in questo modo infatti otterremo

P(si rompono 0, 1, o 2 motori su 4)P(si rompe 0 o 1 motore su 2)1P(si rompono 3 o 4 motori)1P(si rompono entrambi i motori)1(43)p3(1p)1p41p24p3+4p4p4+p20p2(3p24p+1)03p24p+10 p[0,13] \mathbb{P}(\text{si rompono 0, 1, o 2 motori su 4})\geq \mathbb{P}(\text{si rompe 0 o 1 motore su 2}) \\ 1-\mathbb{P}(\text{si rompono 3 o 4 motori}) \geq 1-\mathbb{P}(\text{si rompono entrambi i motori}) \\ 1-{4\choose 3}p^3 (1-p)^1-p^4 \geq 1 - p^2 \\ -4p^3+4p^4-p^4 +p^2 \geq 0 \\ p^2(3p^2-4p+1)\geq 0 \\ 3p^2-4p +1 \geq 0 \implies p\in\left[0,\frac{1}{3}\right]

Si potrebbero infine anche confrontare più motori ma l'idea è sempre la stessa: per pp basse (i motori sono affidabili) sono avvantaggiate le barche con molti motori; per pp alte (un motore si guasta facilmente) diventa conveniente passare ad un modello con 2 soli motori, avendo in questo modo "meno occasioni" di manifestare un guasto.

plot(ps,p_navigare.(2,ps), label="2 motori")
plot!(ps,p_navigare.(4,ps), label="4 motori")
plot!(ps,p_navigare.(6,ps), label="6 motori")
plot!(ps,p_navigare.(8,ps), label="8 motori")
plot!(ps,p_navigare.(10,ps), label="10 motori")

Concludiamo con una simpatica gif che mostra l'andamento delle varie probabilità, con anche un effetto Matrix/zoom nella parte centrale più interessante.

ps1 = range(0.0, 0.3, length=500)  # less dense before 0.3
ps2 = range(0.3, 0.5, length=2000) # denser in [0.3, 0.5]
ps3 = range(0.5, 1.0, length=500)  # less dense after 0.5
ps = unique(vcat(ps1, ps2, ps3))

ys = [p_navigare.(n, ps) for n in 2:2:10]
labels = string.(collect(2:2:10)," motori")
colors = [:blue, :green, :red, :orange, :purple]

@gif for i in 1:length(ps)
    plt = plot(dpi=300)
    for j in 1:length(ys)
        plot!(ps[1:i], ys[j][1:i], label=labels[j], color=colors[j])
    end
end every 10
Last modified: May 01, 2025. Website built with Franklin.jl and the lovely Julia programming language.