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

Algoritmo ricorsivo: realizzazione di un applicativo di supporto alle vendite per una concessionaria #120

Closed RosarioInterlandi closed 8 months ago

RosarioInterlandi commented 9 months ago

Studente proponente

s284166 Rosario Interlandi

Titolo della proposta

Algoritmo ricorsivo: realizzazione di un applicativo di supporto alle vendite per una concessionaria

Descrizione del problema proposto

Il software da realizzare consiste in un applicativo attraverso il quale l'utente si interfaccia a un database contenente auto da vendere a una concessionaria per trovare i veicolo che più soddisfano le sue esigenze. L'applicativo consiste nel permettere all'utente di selezionare alcuni vincoli di ricerca che vanno a filtrare il database delle auto presenti nel database contente tutte le informazioni dell'e-commerce di un ipotetica concessionaria. Una volta inseriti i vari vincoli (numero massimo di chilometri, tipo di carburante, anno minimo, etc.) e verrà creato un grafo pesato e orientato avente come nodi i diversi veicoli (di cui creo una classe per rappresentarle con tutti gli attributi del db) due nodi sono collegati solo se sono della stessa marca e il peso di ogni arco uscente sarà uguale al prezzo di quel veicolo. Dopo la creazione del grafo l'utente potrà selezionare quale auto vuole sicuramente comprare e potrà inserire il budget disponibile. Alla pressione di un bottone verrà consigliata la migliore soluzione di veicoli da comprare rimanendo nel budget dell'utente e che soddisfano i vincoli dell'utente.

Descrizione della rilevanza gestionale del problema

Dal punto di vista gestionale questo software potrebbe essere usato da aziende che producono auto per creare proposte di vendita personalizzate alla disponibilità dell'utente cercando di spingere il prodotto.

Descrizione dei data-set per la valutazione

Ho utilizzato il dataset presente su questo link: https://www.kaggle.com/datasets/nehalbirla/vehicle-dataset-from-cardekho?select=car+details+v4.csv, ho usato solo la tabella "car details v4.csv" a cui ho apportato alcune modifiche, ovvero ho aggiunto una colonna id per avere un codice univoco per ogni auto ed evitare di creare una chiave formata da più attributi per identificarlo, ho splittato i dati della colonna "Max Power" in due (bhp e rpm) in modo che siano confrontabili e ho rimosso la colonna "Max torque". Il dataset avrà le seguenti colonne: 1-Id(INT): Un codice che identifica univocamente l'auto all'interno del database 2-Make(VARCHAR): Una stringa che identifica la casa automobilistica 3-Model(VARCHAR): Stringa che identifica il modello del veicolo 4-Price(INT): Valore intero che rappresenta il valore del veicolo in rupie 5-Year(INT): Valore che indica l'anno di produzione del veicolo 6-Kilometer(INT): Valore che indica il numero di chilometri percorsi dal veicolo 7-Fuel_Type(VARCHAR): Stringa che indica il tipo di carburante usato dal motore 8-Transmission(VARCHAR): Stringa che rappresenta il tipo di cambio 9-Location(VARCHAR):Stringa che rappresenta il luogo di provenienza del veicolo 10-Color(VARCHAR):Stringa che rappresenta il colore del veicolo 11-Owner(VARCHAR): Stringa che indica se l'auto è nuova o usata 12-Seller_Type(VARCHAR): Stringa che indica il tipo di venditore 13-Engine(INT): Valore che indica il numero di cavalli del motore 14-bhp(INT): Valore che indica la potenza massima in bhp 15-rpm(INT): Valore che indica la potenza massima in rpm 16-Drivetrain(VARCHAR): Striga che indica la trasmissione del veicolo 17-Length(DOUBLE):Valore che indica la lunghezza del veicolo in mm 18-Width(DOUBLE): Valore che indica la larghezza del veicolo in mm 19-Height(DOUBLE): Valore che indica l'altezza del veicolo in mm 20- Seating_Capacity(INT): Valore che indica il numero di sedili(massima portata persone) 21-Fuel_Tank_Capacity(DOUBLE): Valore che indica la massima portata del serbatoio in litri

Descrizione preliminare degli algoritmi coinvolti

Indicare quali sono i principali problemi algoritmici che si dovranno affrontare. Non sono sufficienti applicazioni di tipo "inserimento/ricerca di record". (tutto lo spazio necessario)

Creazione di un grafo competo orientato e pesato, una volta creato il grafo, selezionato l'auto da acquistare (il vertice da cui partire) viene esplorato il grafo attraverso un algoritmo ricorsivo che ha come vincolo di uscita dalla funzione il superamento del budget e come livello per misurare l'insieme migliore la media di chilometri percorsi dalle auto dell'insieme, risolvendo quindi un knapsack problem ( se ho due auto la somma dei chilometri delle due auto diviso due).

Descrizione preliminare delle funzionalità previste per l’applicazione software

Descrivere, a livello di previsione generale, quale sarà il funzionamento dell'applicazione, vista dall'utente che la dovrà utilizzare. (max 1/2 pagina) L'utente inizialmente dovrà inserire alcuni vincoli, non è obbligato a inserirli tutti ma potrà anche selezionarne solo alcuni. Dopo di che verrà popolata una tendina con tutte le auto che sono presenti nel grafo, dopo averne scelta una e aver inserito il budget disponibile alla pressione di un bottone verrà calcolato il migliore insieme di auto secondo il modello descritto nel punto precedente.

fulcorno commented 8 months ago

Non ho ben compreso il tipo di algoritmo ricorsivo che viene proposto. Prova a descriverlo senza fare riferimento al grafo: data un'auto di partenza, ed un budget massimo, trova (un'auto? un insieme di auto?...) che siano compatibile con il budget e..... (quale caratteristica viene ottimizzata???). Ad un certo punto hai menzionato "la media di chilometri percorsi", ma non riesco a capire l'utilità di questa metrica.

Se il grafo ha gli archi solo tra auto della stessa marca, mi pare che la ricorsione sarebbe costretta a fornire solo auto di quella marca. Ha senso questa restrizione? Detto in altre parole, mi pare che per un problema di ottimizzazione simil-zaino non sia necessaria né opportuna una rappresentazione a grafo.

RosarioInterlandi commented 8 months ago

Lo scopo dell'algoritmo ricorsivo è quello di trovare l'insieme di auto che, rispettando il budget, abbia la media di chilometri percorsa minore. La soluzione viene offerta a un ipotetico proprietario di una concessionaria interessato a una sola auto per spingerlo a comprare più auto offrendogli le migliori auto simili presenti nella concessionaria, la metrica della media sui chilometri percorsi è stata scelta per inserire nell'insieme le auto che sono in migliori condizioni (dato che hanno percorso meno chilometri si può assumere che siano meno danneggiate) e quindi più interessanti al cliente (dato che il suo interesse è quello di rivenderle ed è molto più facile vendere le auto che sono in migliori condizioni).

L'imposizione del vincolo sulla marca è stata inserita per limitare il numero di archi dato che creando un grafo completo e diretto avrebbe richiesto all'algoritmo ricorsivo un costo computazionale troppo alto a meno che non vengano inseriti vincoli molto stringenti che riducano il numero di vertici a meno di una trentina. Ma rimuovendo il vincolo sulla marca continua a funzionare quindi potrei pure rimuoverlo.

Per quanto riguarda la rappresentazione a grafo posso anche rimuoverlo se ritiene che non è necessario e fare solamente l'applicazione del filtro e ,sul set di dati rimanente dopo il filtro, applicare l'algoritmo ricorsivo. Dato che andrei a fare solamente l'algoritmo ricorsivo lo vorrei rendere personalizzabile, ovvero farei scegliere all'cliente che tipo di ricerca vuole: 1 quella descritta nella proposta; 2 trovare l'insieme con più veicoli ,rispettando il budget(massimizzo il numero di veicoli) 3 l'insieme di auto che abbia valore più alto , rispettando il budget(massimizzo il prezzo dell'insieme)

fulcorno commented 8 months ago

ok, ho capito lo spirito dell'algoritmo. va bene concentrarsi sulla ricorsione (toglierei il vincolo di marca), lasciando le personalizzazioni del tipo di richiesta. se il grafo non è necessario ai fini dell'algoritmo, inutile farlo.

appena riesco (1-2 gg) ti creo il repository, non riesco a farlo ora

fulcorno commented 8 months ago

ho creato il repository, avrai ricevuto la mail per accettare l'accesso