TdP-prove-finali / Introduzione

Istruzioni e documentazione per la proposta e lo svolgimento delle prove finali relative al corso di Tecniche di Programmazione.
http://bit.ly/tecn-progr
Apache License 2.0
4 stars 13 forks source link

Software per la gestione e la massimizzazione dei profitti nel settore della vendita di imbarcazioni da diporto #101

Closed Gianluca280600 closed 1 year ago

Gianluca280600 commented 1 year ago

Studente proponente

s273910 Maida Gianluca

Titolo della proposta

Software per la gestione e la massimizzazione dei profitti nel settore della vendita di imbarcazioni da diporto

Descrizione del problema proposto

La Società in questione si occupa della compravendita di barche di varia grandezza e tipologia; in particolare, acquista sia nuovo che usato per poi rivenderlo alla clientela gestendo rimessaggio, montaggio e/o manutenzione e per procedere al successivo varo in acqua. Il software che svilupperò si propone di aiutare la società nell'individuare il prezzo di rivendita e nel trovare, attraverso un algoritmo ricorsivo, una soluzione ottimale sulla scelta delle barche da acquistare con il budget prefissato al fine di massimizzare il guadagno atteso dalla rivendita, rispettando i vincoli selezionati. Il prezzo per la rivendita viene stabilito dalla società che ipotizza di ottenere un determinato profitto a partire da una serie di analisi su ogni singola barca. Partendo, innanzitutto, dalle condizioni (nuovo o usato) calcolerò una percentuale fissa sul costo di acquisto delle singole barche al quale si aggiunge il costo di eventuali montaggi e/o lavorazioni per procedere al varo; quest'ultimo avrà un costo variabile in base alla categoria di appartenenza, calcolato secondo le dimensioni della barca (esempio da 7 a 15 metri, da 15 a 22 metri, ecc.). Inoltre, sarà possibile selezionare dei filtri per rendere le proposte di acquisto più adatte alle esigenze della società. Sarà prevista anche la possibilità di includere nella soluzione proposta una o più barche che la società vorrebbe necessariamente acquistare.

Descrizione della rilevanza gestionale del problema

La rilevanza del problema, da un punto di vista gestionale, riguarda la possibilità di individuare, attraverso un algoritmo ricorsivo, una soluzione ottimale che massimizzi il profitto tenendo conto dei vincoli espressi e di fornirla alla società in modo da finalizzare un acquisto che rispetti gli standard richiesti. Nel caso preso in esame, infatti, l'applicazione non si limita a fornire una soluzione di acquisto che sia robusta e risponda in maniera ottimale al problema matematico, ma trova la sua rilevanza gestionale proprio nell’elasticità dell'algoritmo che permette, agendo sui vincoli, di soddisfare le esigenze dell'azienda.

Descrizione dei data-set per la valutazione

Il data-set che verrà utilizzato è stato preso dal sito Kaggle: https://www.kaggle.com/datasets/karthikbhandary2/boat-sales. In particolare, i dati riguardano una serie di informazioni su imbarcazioni da diporto in vendita in tutto il mondo. Il data-set verrà modificato in modo da selezionare esclusivamente le barche in vendita in Italia e ripulito da colonne superflue, doppioni e righe errate o non del tutto complete. Una volta ripulito conterrà informazioni su:
-prezzo di vendita in euro; -la tipologia (ad esempio Sport Boat, Mega Yacht...); -manifattura; -condizioni (nuovo o usato); -anno di produzione; -lunghezza; -larghezza; -luogo di provenienza.

Descrizione preliminare degli algoritmi coinvolti

Innanzitutto, il software sarà in grado di fornire una lista di barche in vendita secondo una serie di condizioni selezionate dall’utente con un algoritmo di ricerca. Sarà possibile esprimere delle preferenze per quanto riguarda la condizione (nuovo o usato), il range di lunghezza desiderato, la tipologia di imbarcazione, l’anno minimo di produzione e il budget disponibile. Inoltre, l'algoritmo è in grado di completare la ricerca anche nel caso in cui non siano espresse particolari esigenze con l’obbligo di inserire il budget massimo a disposizione. Dopodiché, l'aspetto principale dell’applicazione sarà un algoritmo ricorsivo che fornisce una soluzione ottimale sull’acquisto che l'azienda può effettuare, tradotto come potenziale massimo profitto realizzabile dalla successiva vendita delle barche. L'algoritmo partirà dalla lista delle barche compatibili con le necessità che l’utente ha selezionato in input (come descritto sopra nell'algoritmo di ricerca) e proporrà un pacchetto di barche acquistabili, con il budget selezionato, in modo da massimizzare il profitto atteso. Il risultato ottenuto, ovvero l'elenco di barche che massimizzerebbe il guadagno, potrà essere confermato e, di conseguenza, le medesime imbarcazioni non saranno più disponibili nel caso si voglia continuare con la ricerca di un ulteriore acquisto. Sarà possibile inserire nella soluzione una o più barche considerate come acquisto certo rispettando sempre il vincolo del budget prefissato. Inoltre, l'algoritmo sarà in grado di proporre, oltre alla soluzione sopra descritta, una proposta di acquisto che supera di poco il budget prefissato per consentire all’utente di avere un quadro più completo e valutare, in caso, un possibile aumento del budget al fine di procedere con quella soluzione.

Descrizione preliminare delle funzionalità previste per l’applicazione software

L'utente avrà a disposizione sulla parte superiore della schermata una serie di vincoli da impostare riguardo le caratteristiche delle barche all'interno del data-set. Un primo bottone sarà in grado di effettuare una ricerca delle barche con le caratteristiche definite prima e stamparle in modo tale da permettere all'utente di visualizzare il quadro completo delle possibilità di acquisto. Qualora, durante la ricerca, si individuasse una determinata barca da acquistare necessariamente, vi sarà la possibilità di inserirla, attraverso il suo id, per poi procedere con il calcolo della soluzione ottimale. Un secondo bottone permetterà di generare una soluzione che massimizza l’investimento con il budget prefissato dall'utente e mostrerà l'elenco delle barche proposte e il guadagno atteso di ogni singola barca. Sarà poi possibile, tramite altri due bottoni appositi, confermare o rifiutare la soluzione proposta. Nel primo caso verrà mostrato l’elenco degli acquisti finora effettuati, il capitale investito per tutti gli acquisti e il guadagno atteso totale e per ogni singola barca. Nel secondo, la soluzione verrà semplicemente scartata e inviterà l'utente a procedere con una nuova ricerca. In entrambi, il programma resetterà i filtri selezionati. Qualora, alla pressione del bottone che genera la soluzione ottimale, l'algoritmo trovi una soluzione che supera di poco il budget prefissato, il programma la mostrerà all'utente; in caso quest’ultimo optasse per la seconda soluzione, sarà possibile modificare il budget manualmente dall’apposita sezione ed effettuare nuovamente la ricerca per poi procedere alla conferma dell'acquisto. Vi sarà, infine, la possibilità di resettare tutti gli acquisti già effettuati per ricominciare con una nuova ricerca.

fulcorno commented 1 year ago

Il tema ed il data set proposti sono accettabili. Ho qualche dubbio invece sull'algoritmo ricorsivo. Fatto 100 il mio budget, e definito un ricarico percentuale fisso sulle barche acquistate, mi pare che il massimo profitto si ottenga semplicemente cercando di spendere il più possibile il bugdet (se spendo 90, guadagnerò il TOT% di 90). Non mi pare che per questo serva una ricorsione (se non cercare di combinare più barche per arrivare "il più vicino possibile" al 100, ma mi pare un po' artificiosa come soluzione). Questo succede perché la funzione da massimizzare (il profitto) è semplicemente proporzionale al costo, ed anche perché non mi pare che ci siano vincoli aggiuntivi (tipo: se compro la barca X, per qualche motivo, non posso più comprare la barca Y) oltre al vincolo sul budget totale.

Si riesce a rendere il problema più interessante dal punto di vista algoritmico? altrimenti mi pare che si riduca ad una versione semplificata del problema dello zaino.

Gianluca280600 commented 1 year ago

Mi dispiace che la mia presentazione non fosse sufficientemente chiara, l'idea che ho avuto non pone il profitto direttamente proporzionato al costo. Nel mio algoritmo, la funzione che determina il profitto atteso dipende si dalla percentuale sul costo delle barche acquistate (differenziando nuovo e usato), ma, a questa, si somma l'introito ricavato dalla gestione e varo in acqua che dipendono dalla lunghezza. Quest’ultimo garantisce che la funzione da massimizzare non sia necessariamente proporzionata al costo, in quanto alla stessa contribuisce questo introito fisso a scaglioni (non percentuale), che dipende dalla categoria di appartenenza, secondo lunghezza. Faccio un esempio con delle percentuali e dei valori approssimativi, successivamente nel progetto finale inserirò dei valori il più possibile realistici, frutto di una ricerca. Quindi, con budget 30mila: Barca 1, costo 10 mila, lunghezza 7 metri, usata Barca 2, costo 20 mila, lunghezza 9 metri, nuova Barca 3, costo 15 mila, lunghezza 11 metri , nuova Barca 4, costo 25 mila, lunghezza 15 metri ,nuova

Assumendo 5% sull'usato e 10% sul nuovo e che il costo di gestione e varo in acqua fino a 10 metri permette di guadagnare 1000, mentre oltre i 10 metri 2000.

Guadagni attesi: Barca 1, 500 dalla percentuale + 1000 dalla gestione, TOT 1500 Barca 2, 2000 dalla percentuale + 1000 dalla gestione, TOT 3000 Barca 3, 1500 dalla percentuale + 2000 dalla gestione, TOT 3500 Barca 4, 2500 dalla percentuale + 2000 dalla gestione, TOT 4500

Selezionando il pacchetto Barca 1 + Barca 2, spendo tutto il budget con un guadagno atteso di 4500, Selezionando il pacchetto Barca 1 + Barca 3, spendo 25000 su 30000 di budget ottenendo un guadagno maggiore (5000). Selezionando il pacchetto Barca 4 spendo 2500 e ottengo un guadagno di 4500

Questo piccolo esempio punta a dimostrare che non necessariamente spendendo di più o comprando più barche ottengo un guadagno maggiore.

Se questo non rende l'algoritmo sufficientemente interessante, avrei pensato di aggiungere un vincolo sul possibile stoccaggio delle barche acquistate. Nel dettaglio, la società potrebbe inserire nell'eventuale ricerca della soluzione ottimale un valore massimo in metri che corrisponde alla spazio disponibile in vetrina per l'esposizione al cliente. L'algoritmo quindi, oltre a trovare una soluzione che massimizza il profitto, deve verificare che lo spazio a disposizione sia sufficiente a contenere tutte le barche da acquistare.

fulcorno commented 1 year ago

ok, grazie per i chiarimenti. La proposta è accettata (con o senza la clausola sullo stoccaggio, dipende da quanto sarà complicato l'implementazione delle altre funzionalità)