IL FORNO ARTIGIANALE DI ROMA
PROGRAMMAZIONE LINEARE funzione obiettivo da massimizzare:
Z = 9.5x1 + 9.5x2 + 9x3 + 8x4 + 11x5 + 3.5x6
Problema di mix produttivo + 4.5x7 + 7.5x8
x1 Pizza rossa
x2 pizza con patate VINCOLI MACCHINARI
x3 focaccia romana 5x₁ + 6x₂ + 4x₃ + 5x₄ + 6x₅ + 3x₆ + 3x₇ + 4x₈ ≤ 100.000 impastatrice
x4 pizza bianca 60x₁ + 65x₂ + 50x₃ + 50x₄ + 70x₅ + 40x₆ + 45x₇ + 55x₈ ≤ 864.000 celle di lievitazione
x5 pizzette rustiche 12x₁ + 13x₂ + 12x₃ + 10x₄ + 14x₅ + 8x₆ + 9x₇ + 11x₈ ≤ 180.000 forno
4x₁ + 4x₂ + 3x₃ + 4x₄ + 5x₅ + 3x₆ + 3x₇ + 3x₈ ≤ 70.000 griglia di raffreddamento
x6 pane casereccio 2x₁ + 3x₂ + 2x₃ + 2x₄ + 4x₅ + 1x₆ + 1x₇ + 2x₈ ≤ 50.000 confezionatrice
x7 pane di segale VINCOLI MATERIE PRIME
x8 medaglione 0.4x₁ + 0.4x₂ + 0.5x₃ + 0.5x₄ + 0.5x₅ + 0.6x₆ + 0.3x₇ + 0.4x₈ ≤ 4.000 farina 00
0.4x₇ ≤ 800 farina di segale
0.3x₁ + 0.3x₂ + 0.25x₃ + 0.25x₄ + 0.25x₅ + 0.3x₆ + 0.3x₇ + 0.25x₈ ≤ 3000 acqua
0.05(x₁ + x₂ + x₃ + x₄ + x₅ + x₆ + x₇ + x₈) ≤ 500 sale
0.02x₁ + 0.02x₂ + 0.02x₃ + 0.02x₄ + 0.02x₅ + 0.03x₆ + 0.03x₇ + 0.02x₈ ≤ 300 lievito
0.05x₁ + 0.07x₂ + 0.10x₃ + 0.05x₄ + 0.08x₅ + 0.01x₆ + 0.01x₇ + 0.05x₈ ≤ 700 olio
0.2x₁ + 0.05x₅ ≤ 500 pomodoro
0.01x₁ + 0.01x₅ ≤ 50 patate
0.3x₂ + 0.1x₅ ≤ 500 rosmarino
ANALISI DEGLI SCENARI STRATEGICI:
soluzione completamente libera (senza vincoli minimi);
vincolo minimo di 300 kg per ciascun prodotto;
aumento disponibilità di farina 00 (risorsa chiave del processo
produttivo) da 4000kg a 4333kg;
aumento margine unitario del Medaglione (bun per hamburger) da 7,5 a
Codice R: # 4. Direzione vincoli
Risoluzione library(lpSolve) f.dir <- rep("<=", 14)
8,5 €/kg. # 1. Prodotti
con R prodotti <- c("Pizza_Rossa", "Pizza_Patate", "Focaccia", "Pizza_Bianca", # 5. Risorse disponibili
"Pizzette", "Pane_Casareccio", "Pane_Segale", "Medaglione") f.rhs <- c(
SCENARIO SENZA # 2. Margine unitario (€ per kg) 100000, 864000, 180000, 70000, 50000,
f.obj <- c(9.5, 9.5, 9, 8, 11, 3.5, 4.5, 7.5) 4000, 800, 3000, 500, 300, 700, 500, 50, 500)
VINCOLI MINIMI # Scenario 1 - Senza vincoli minimi
# 3. Matrice dei coefficienti (vincoli) sol1 <- lp("max", f.obj, f.con, f.dir,
f.con <- matrix(c( f.rhs)
# Macchinari # Risultati
5, 6, 4, 5, 6, 3, 3, 4, sol1$solution
60, 65, 50, 50, 70, 40, 45, 55, sol1$objval
12, 13, 12, 10, 14, 8, 9, 11,
4, 4, 3, 4, 5, 3, 3, 3, RISULTATI OTTENUTI:
2, 3, 2, 2, 4, 1, 1, 2,
# Materie Prime Quantità prodotte:
0.4, 0.4, 0.5, 0.5, 0.5, 0.6, 0.3, 0.4,
0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.4, 0.0, 1666.6667 555.5556
0.3, 0.3, 0.25, 0.25, 0.25, 0.3, 0.3, 0.25, 0.0000 0.0000
0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05,
0.02, 0.02, 0.02, 0.02, 0.02, 0.03, 0.03, 0.02, 3333.3333 0.0000
0.05, 0.07, 0.10, 0.05, 0.08, 0.01, 0.01, 0.05,
0.2, 0.0, 0.0, 0.0, 0.05, 0.0, 0.0, 0.0, 0.0000 3611.1111
0.01, 0.0, 0.0, 0.0, 0.01, 0.0, 0.0, 0.0,
0.0, 0.3, 0.0, 0.0, 0.1, 0.0, 0.0, 0.0 Profitto: 84861.11
), nrow = 14, byrow = TRUE)
CONFRONTO GRAFICO TRA I QUATTRO DIVERSI SCENARI
PRODUTTIVI
Scenario 1 Scenario 2 Scenario 3 Scenario 4
Prodotto (Medaglione 8.5
(Libero) (Minimo 300 kg) (Farina 4333 kg) €/kg)
Pizza rossa 1666,67 1666,67 1666,67 2500,00
Pizza con patate 555,56 555,56 555,56 1666,67
Focaccia romana 0,00 300,00 300,00 0,00
Pizza bianca 0,00 300,00 300,00 0,00
Pizzette rustiche 3333,33 3333,33 3333,33 0,00
Pane casareccio 0,00 300,00 300,00 0,00
Pane di segale 0,00 300,00 300,00 0,00
Medaglione 3611,11 2186,11 3018,61 5833,33
Profitto (€) 84.861,11 81.673,61 87.917,36 89.166,67
Teoria dei Grafi: Rete
Distributiva
Connessioni della Rete: Distanze dei nodi della rete:
• Laboratorio rifornisce: Distanza
• Antico Forno Roscioli Da → A (km)
• Forno Roscioli Pietro – Esquilino Laboratorio → Antico Forno Roscioli 8.2
• Best Western Plus Hotel Universo
• Best Western Premier Hotel Royal Laboratorio → Forno Roscioli Pietro 7.5
Santina
• Laboratorio → Best Western Plus Hotel
Best Western Hotel President 8.0
Universo
• Hotel Raffaello
• Hilton Garden Inn Rome Claridge Laboratorio → Best Western Premier Hotel 8.0
Royal Santina
Laboratorio → Best Western Hotel President 7.8
• Antico Forno Roscioli rifornisce:
• Roscioli Salumeria con Cucina Laboratorio → Hotel Raffaello 7.9
• Roscioli Caffè Pasticceria Laboratorio → Hilton Garden Inn Rome 9.5
Claridge
• Forno Roscioli Pietro – Antico Forno Roscioli → Roscioli Salumeria
Esquilino rifornisce: 0.2
con Cucina
• Roscioli Salumeria con Cucina Antico Forno Roscioli → Roscioli Caffè
• Roscioli Caffè Pasticceria 0.3
Codice R:
Costruzione # Caricare il pacchetto igraph
library(igraph)
del grafo # Definizione dei nodi
nodi <- c("Laboratorio", "Antico Forno", "Roscioli Pietro",
"Salumeria", "Caffè",
orientato "Hotel Universo", "Hotel Royal Santina", "Hotel
President", "Hotel Raffaello", "Hotel Claridge")
# Definizione degli archi con le distanze come pesi
archi <- data.frame(
from = c("Laboratorio", "Laboratorio", "Laboratorio",
"Laboratorio", "Laboratorio", "Laboratorio", "Laboratorio",
"Antico Forno", "Antico Forno", "Roscioli Pietro",
"Roscioli Pietro"),
to = c("Antico Forno", "Roscioli Pietro", "Hotel Universo",
"Hotel Royal Santina", "Hotel President", "Hotel Raffaello",
"Hotel Claridge",
"Salumeria", "Caffè", "Salumeria", "Caffè"),
weight = c(8.2, 7.5, 8.0, 8.0, 7.8, 7.9, 9.5, 0.2, 0.3, 2.5,
2.6)
)
# Creazione del grafo orientato
g_orientato <- graph_from_data_frame(d=archi, vertices=nodi,
directed=TRUE)
# Visualizzazione del grafo
plot(g_orientato, edge.label=E(g)$weight,
vertex.label.color="black", vertex.size=30,
Codice R:
# Carica il pacchetto necessario
library(igraph)
Costruzione # 1. Definizione dei nodi
nodi <- c(
"Laboratorio", "Antico Forno", "Roscioli Pietro", "Salumeria",
"Caffè",
del grafo non "Hotel Universo", "Hotel Royal Santina", "Hotel President",
"Hotel Raffaello", "Hotel Claridge"
)
# 2. Definizione degli archi reali e pesati (rete logistica effettiva)
orientato archi_non_orientati <- data.frame(
from = c(
"Laboratorio", "Laboratorio", "Laboratorio", "Laboratorio",
"Laboratorio", "Laboratorio", "Laboratorio",
"Antico Forno", "Antico Forno",
"Roscioli Pietro", "Roscioli Pietro"
),
to = c(
"Antico Forno", "Roscioli Pietro", "Hotel Universo", "Hotel Royal
Santina", "Hotel President",
"Hotel Raffaello", "Hotel Claridge",
"Salumeria", "Caffè",
"Salumeria", "Caffè"
),
weight = c(
8.2, 7.5, 8.0, 8.0, 7.8, 7.9, 9.5,
0.2, 0.3,
2.5, 2.6
)
)
# 3. Creazione del grafo non orientato
g_non_orientato <- graph_from_data_frame(d = archi_non_orientati,
vertices = nodi, directed = FALSE)
# 4. Visualizzazione del grafo
plot(
g_non_orientato,
edge.label = E(g_non_orientato)$weight, # etichette con pesi
(distanze)
vertex.label.color = "black",
vertex.label.cex = 0.9,
vertex.size = 30,
vertex.color = "lightblue",
Grafo non orientato
visualizzato geograficamente
Codice R: "Laboratorio Produzione Roscioli",
"Antico Forno Roscioli", "Antico
library(leaflet) Forno Roscioli",
library(dplyr) "Forno Roscioli Pietro -
# Nodi con coordinate aggiornate Esquilino", "Forno Roscioli Pietro -
nodi <- data.frame( Esquilino"
name = c( ),
"Laboratorio Produzione Roscioli", to = c(
"Antico Forno Roscioli", "Antico Forno Roscioli",
"Forno Roscioli Pietro - "Forno Roscioli Pietro -
Esquilino", Esquilino",
"Roscioli Salumeria con Cucina", "Best Western Plus Hotel Universo",
"Roscioli Caffè Pasticceria", "Best Western Premier Hotel Royal
"Best Western Plus Hotel Universo",
Santina",
"Best Western Premier Hotel Royal "Best Western Hotel President",
Santina", "Hotel Raffaello (Sure Hotel)",
"Best Western Hotel President", "Hilton Garden Inn Rome Claridge",
"Hotel Raffaello (Sure Hotel)", "Roscioli Salumeria con Cucina",
"Hilton Garden Inn Rome Claridge" "Roscioli Caffè Pasticceria",
), "Roscioli Salumeria con Cucina",
lat = c( "Roscioli Caffè Pasticceria"
41.856298039719235, ),
41.8946, stringsAsFactors = FALSE
41.8957, )
41.8949, # Mappa base
41.8942, mappa <- leaflet(nodi) %>%
41.9010, addTiles() %>%
41.9015, addCircleMarkers(
41.8883, lng = ~lon, lat = ~lat,
41.8961, radius = 6,
41.9207 color = "blue",
), fillOpacity = 0.9
lon = c( )
12.456881780747205, # Aggiunta delle linee (non orientate)
12.4755, for(i in
12.5074, seq_len(nrow(archi_non_orientati))) {
12.4743, from_node <- filter(nodi, name ==
12.4746, archi_non_orientati$from[i])
12.4953, to_node <- filter(nodi, name ==
12.5013, archi_non_orientati$to[i])
12.5098, mappa <- mappa %>%
12.4948, addPolylines(
12.5071 lng = c(from_node$lon,
), to_node$lon),
stringsAsFactors = FALSE lat = c(from_node$lat,
) to_node$lat),
# Archi NON orientati (stesse color = "darkgreen",
connessioni, senza direzione) weight = 2,
archi_non_orientati <- data.frame( opacity = 0.7
from = c( )
"Laboratorio Produzione Roscioli", }
"Laboratorio Produzione Roscioli", # Visualizza la mappa
Misure di centralità (grafo
non orientato)
Definizioni delle misure di centralità:
Misura il numero di archi che si collegano ad un nodo e l’importanza di un nodo in base
1) Degree Centrality:
al numero dei suoi vicini. Misura la distanza di un nodo da tutti gli altri nodi, è anche l’inverso del
-
Project Work Metodi quantitativi per il management
-
Impresa e decisioni strategiche - Progetto, Report, Project Work + Presentazione PPT - Prof. Calderini
-
Presentazione sull'arteriosclerosi
-
Step 6 - Presentazione powerpoint del Project Work - analisi del mercato e proposta palinsesto al committente (Sky,…