Un'industria produce due prodotti A e B e utilizza due macchinari P e Q.
Per ogni kg di A sono necessarie 1 ora e mezza di P e 3 ore di Q,
per ogni kg di B sono necessarie 2 ore di P e 2 ore e mezza di Q.
Inoltre A non può essere prodotto in più di 17 kg alla settimana,
la macchina P non può lavorare per più di 40 ore alla settimana,
mentre Q per non più di 55.
Sia m l'unità di misura monetaria in vigore.
Determinare qual è la combinazione produttiva più conveniente, sapendo che ogni kg
di A viene venduto a
Schema risolutivo
A | B | Ore disponibili |
x = quantità di A y = quantità di B z = funzione obiettivo = ricavo | |
P | 1.5 | 2 | 40 | |
Q | 3 | 2.5 | 55 |
Risolviamo il problema con R usando ( "a scatola nera") la funzione simplex. |
|
library(boot) # Carico la libreria contenente "simplex":
# I vincoli:
A11 <- c(1.5,2); b11 <- 40 # quelli ≤
A12 <- c(3,2.5); b12 <- 55
A13 <- c(1,0); b13 <- 17
A21 <- c(1,0); b21 <- 0 # quelli ≥
A22 <- c(0,1); b22 <- 0
# Il probl. da massimizzare:
a1 <- c(15e3, 9e3)
simplex(A1=rbind(A11,A12,A13), A2=rbind(A21,A22), a=a1,
b1=c(b11,b12,b13), b2=c(b21,b22), maxi=TRUE)
Optimal solution has the following values
x1 x2
17.0 1.6
The optimal value of the objective function is 269400
Conviene produrre 17 kg di A e 1.6 kg di B.
Ecco la rappresentazione grafica (e una soluzione alternativa) del problema:
source("http://macosa.dima.unige.it/r.R") P <- function(x,y) (1.5*x+2*y<= 40) & (3*x+2.5*y<= 55) & (0<= x) & (x<= 17) & (0<= y) HF <- 3; BF <- 3 # La scelta della porzione di piano (eventualmente poi # ritraccio dopo la rappresentazione delle rette) Piano(-0.5,22, -0.5,22) diseq2(P,0, "grey") # Dove P > 0 ovvero P = 1 diseq2(P,0, "grey") f1 <- function(x,y) 1.5*x+2*y - 40; f2 <- function(x,y) 3*x+2.5*y - 55 f3 <- function(x,y) x; f4 <- function(x,y) y; f5 <- function(x,y) x-17 curva(f1,"red"); curva(f2,"green"); curva(f3,"orange") curva(f4,"blue"); curva(f5,"violet") F <- function(x,y) 15000*x + 9000*y - M M <- 0; cur(F,"black") M <- 1e5; cur(F,"black") # intersezione tra viola (f5) e verde (f2) sistema(c(1,0,17, 3,2.5, 55)) # 17.0 1.6 PUNTO(17, 1.6, "red") M <- 0; F(17,1.6) # 269400 M <-ultimo(); cur(F,"black")
Avrei ottenuto la stessa risposta con WolframAlpha mettendo
maximize[15000x+9000y, {1.5x+2y<=40 && 3x+2.5y<=55 && x<=17 && y>=0 && x>=0} ]
Approfondimenti in: Programmazione lineare neGli Oggetti Matematici.