Tercera entrega de PROP (2013)

Apunte Catalán
Universidad Universidad Politécnica de Cataluña (UPC)
Grado Ingeniería Informática - 3º curso
Asignatura PROP
Año del apunte 2013
Páginas 12
Fecha de subida 16/06/2014
Descargas 0

Descripción

tercera entrega de PROP

Vista previa del texto

3A ENTREGA PROP Codi de projecte: 14.3 Versió: 1.0 Arnau Crous Valverde arnau.crous Genís Bayona i Jaume  genis.bayona Berta Delgado Ventosa berta.delgado Alejandra Porras Mateo alejandra.isabe.porras 1 ÍNDEX 1.Manual d’usuari 3 2. Diagrames Domini i controladors del domini Vistes i controladors de presentació Gestors de disc Annex 6 6 6 7 7 3.Breu descripció de les estructures de dades i algorismes 9 4. Llista de funcionalitats implementades i relació de diferències 11 5. Relació de les classes compartides pel clúster 12 6.Relació de les classes implementades 12 2 1.Manual d’usuari Quan  s’inicia  el  programa  hi  ha  l’opció  de  “Manteniment Stock”  i  “Prestatgeria”.  Si clickem Manteniment  Stock  podrem  realitzar  totes  les  tasques  relacionades  amb  la  gestió,  creació  i actualització   de  l’Stock  sense  tenir  en  compte  la  seva  ordenació.  Si  ho  fem,  se’ns  obrirà  una pantalla  amb  les  opcions que s’estenten posteriorment. Algunes d’ elles no podrem accedir­hi si l’stock  està  buit,  si  tanquem aquesta  pestanya  finalitzarem  el  nostre  programa.Un  cop  tinguem l’stock carregat tindrem les opcions següents: ­Afegir  Producte:   Podem  crear  un  nou  producte  amb  els  seus  atributs  corresponents (nom, categoria,  color  i  preu),  que  s’afegirà  a  l’estoc  actual   en  el  moment  en  que  premem  el  botó Afegir.  Si  no  s’han  introduït  les  dades  correctament  o  falten  camps,  apareixerà  a  sota  un missatge d’error.
El  nom  del  producte  només podrà ser un conjunt de caràcters i serà el seu identificador de cara al  client.  Com  s’ha  definit  anteriormanet,  no  poden  haver  dos  productes  iguals,  és  a dir, amb el mateix  nom,  per tant, si es dóna aquesta situació el programa  ens mostrarà que aquell producte ja  existeix.  Per  determinar  el  color  i  el  tipus  de  producte  s’haurà  de  seleccionar  dels desplegables les opcions disponibles.
Al  fixar  el  preu  només  es  podrà introduïr  un  nombre  enter  en  el  camp  corresponent.  Per  poder crear un producte s’ha d’haver emplenat tots els camps.
Quan  acabem d’afegir els productes que volguem podem tornar al menú anterior clickant al botó de  Tornar,  si  no  premem el botó Acceptar el producte no s’haurà afegit a l’stock en el que s’està treballant actualment.
­Buscar  Producte:  Aquesta  opció  ens  permetrà  buscar  en  l’stock  actual  un  producte pel  seu nom.  Si  no  hi  és  ens apareixerà un missatge d’error, d’altra banda es ressaltarà el producte que voliem buscar en l’stock.
­Personalitzar  Similitud:  En  aquesta  pestanya  podrem  canviar   la  similitud  per  defecte  per aquella  que  desitgi  el  client. Per fer­ho posem el nom dels  dos productes que es vol modificar la seva  relació  entre  si  i  el  nou  valor(entre  0  i  100).  No  es  pot  fixar  similituds  amb algun  producte inexistent o fixar la similitud amb tu mateix (ja que per definició és 0).
Si  el  grau  de  similitud  no  està  entre  0  i  100  o  intentem  fixar­la  amb  una  de  les  casuístiques esmentades anteriorment, se’ns mostrarà el missatge d’error pertinent.
Quan  cliquem  per  personalitza’l se’ns  mostrarà  un  missatge  en  que  sen’s  informa  de  quina  és la relació actual entre els productes, d’aquesta manera canviem la similitud amb criteri.
S’haurà  personalitzat  el  grau  un  cop  premem el botó Acceptar, quan haguem acabat premerem el botó Tornar, que ens portarà al menú de gestió d’stock.
­Similitud per defecte: Serveix per calcular de nou les similituds automàtiques que et genera el programa.  Si  s’executa  aquesta  opció  perdrem  les  similituds  posades  manualment.  Sortirà  un missatge  per  avisar­nos  si  realment  volem  realitzar  aquesta  opció,  si  premem  el  botó  Si,  es recalcularà.   Sino  es  mantindran  les  similituds  existents.  Quan  s’hagi   calculat  per  defecte  ens 3 sortirà un missatge per informar­nos.
­Guardar Stock: Permet a l’usuari guardar l’stock amb el que està treballant. S’ha de posar­li un nom  i   escollir  el  directori  on  el  volem  guardar.  D’aquesta  manera  el   podrem  recuperar posteriorment.
­Carregar  Stock:  Ens  permet  agafar un  stock  nou d’un fitxer per treballar amb ell o carregar un d’anterior per poder modificar­lo.
­INICI:  El  botó  inici  ens  permet tornar  a  la  finestra  principal  del  programa  per  poder  ordenar  el nostre stock o tornar a començar.
Quan  hem  acabat  de gestionar el nostre stock i volguem ordenar­lo tot o parcialment, clickem el botó  d’inici.Si  tornem  a  la  finestra  d’inici,  com  hem  dit  abans,  hi  trobem  l’  opció  Prestatgeria.
Recordem  que  una  prestatgeria  està  definida  com  un  stock  total  o  parcial  ordenat  segons   el grau  de  similitud  en  la  prestatgeria  del  nostre  supermercat.  Si  anem  a  aquesta  opció  se’ns obrirà una nova finestra de Selecció de productes.
En  aquesta  finestra  se’ns  mostra  un  llistat  a  l’esquerra  on   seleccionem  aquells  productes  de l’stock  actual  que,  com  a  client,  desitgem  ordenar  en  el  nostre  supermercat.  Podem  afegir  i treure  al  nostre   gust  els  productes  del  llistat  de  productes  a  ordenar.  Obviamnet  es  pot seleccionar  més  d’un producte  o  tots  fent  servir  control i/ o el shift depèn el que busqui el client.
Perquè sigui més visual, se’ns mostra el llistat de productes seleccionats a la dreta.
 Aquesta finestra té també les opcions següents: ­INICI:  Com  el  seu  nom  indica,  ens  permet  tornar  a  la  pantalla  principal  del  programa.  Ens sortirà  un  missatge  per  avisar­nos  que  si  tornem  al  menú  principal  sense  guardar es  perdrà  la llista de productes seleccionats.
­Carregar  Prestatgeria:  Ens  dóna l’opció de recuperar una prestatgeria guardada anteriorment per  poder  seleccionar  o  desseleccionar  nous  productes  i/o  calcular  novament  la  seva distribució.
­Guardar  Prestatgeria: Permet a l’usuari guardar la prestatgeria actual per poder consultar­la o modificar­la en qualsevol moment.
­Ordenar:   Aquesta  opció  ens permet  escollir  l’algoritme  en  què  volem  que  el  nostre  programa ordeni  la  prestatgeria.Podem  escollir  dos  algoritmes,  Greedy  o  2­Aproximacio.  Sigui  quina sigui la nostra elecció se’ns obrirà una nova finestra amb el llistat de productes ja ordentas.
Aquesta nova finestra té les opcions: ­Guardar: Permet guardar la ordenació feta amb l’algorisme escollit que es mostra en el llistat.
4 ­Tornar: Ens deixa anar enrere per si volem fer una altre elecció.
­INICI: Retornem a la pantalla principal.
­Executar:  Tot  i  que en  aquest  punt ja s’ha obtingut una possible organització de la prestatgeria del  supermercat,   es  pot  aplicar  una  optimització  amb  Hill  Climbing.  Per  trobar  aquest  resultat millor  indiquem  els  minuts(nombre enter) que volem que s’executi  l’algoritme. Hem de esperar a que  trancorri  aquest  temps.  Tenim  una  progress  bar  per  poder  veure que el programa continua executant­se.  Un  cop  passat  aquest  temps,  es  mostrarà  el  llistat   actualitzat  en  la  mateixa pantalla. Quan ja l’hagim trobat podrem recaclular­la o si ja hem acabat tancar el programa.
5 2. Impressió separada dels tres diagrames següents: ­ Domini i controladors del domini: Link: https://cacoo.com/diagrams/gjF0TdxxdHXYZItR ­ Vistes i controladors de presentació: 6 Link: https://cacoo.com/diagrams/mXV9xVIE1V9CEYXs ­ Gestors de disc: Link: https://cacoo.com/diagrams/GnO5juXyWWbBmIDO A continuació es mostren totes les classes ben especificades (de presentació i domini): Link: https://cacoo.com/diagrams/jAPj1MPsOF96drVn 7 Link: https://cacoo.com/diagrams/PgCvwLotlq3pZlpB 8 3. Breu descripció de les estructures de dades i algorismes utilitzats per a implementar les funcionalitats principals.
L’  estructura  del  nostre  programa  consta  principalment  d’una  Llista  anomenada PROPListSupermercat  i  un  Graf  que  en  direm  GrafSupermercat.  Aquestes  dues  classes  son una  extensió  de  la  classe  abstracte  compartida  pel  clúster  que  s’anomena  PROPList  i PROPGraph.
Per  implementar  la   Llista,  hem  utilitzat  un  ArrayList<Integer>,  i  li  hem  assignat  un  nom  per poder  identificar­la  si  la  volem  guardar  o  carregar  a  un  fitxer,  a  més,  li  hem  implementat  les funcionalitats bàsiques com get, set, contains, swap per poder treballar fàcilment amb ella.
Per  al  Graf, hem  implementat les adjacències(que simulen les  relacions  entre productes) com a un  vector   <ArrayList  <integer>>,  i  hem  definit  un  hashmap  per  poder  traduïr  i  treballar  més fàcilment  amb  les  llistes  de  productes,  utilitzant  únicament  indicadors  de  0  a  n,  on  n  es  el nombre  d’elements  que  volem  utilitzar,  i  hem  definit  les  diferents  funcions  que  un  esperaria trobar  en  un graf, per  exemple:  afegir  i  treure  aresta  o  node,  una  creadora  amb  llista de nodes, consultores , setters… És a dir, totes les funcions bàsiques per manipular el nostre graf.
A  part  d’això,  hem  definit  estructures menys  genèriques  i  més  concretes  pel  nostre  programa.
La  unitat  més  bàsica  és  la  classe  Producte,  que  guarda  la  informació  d’un  producte  i  té operacions  bàsiques.  També  hem  implementat  el  càlcul  de  similituds,  el  nostre  sistema proposa  una  forma de  considerar  el  grau  de  similitud  que  tenen  dos productes  existents.  En  el CjtSimilituds,  guardem  totes  aquestes  similituds  que  s’estableixen  entre els diferents productes de  l’Stock  en   una  matriu  d’adjacències  simètriques.  Ja  que  vem  definir  les  relacions  entre productes reflexiva.
L’  Stock,  és  la  classe  on  tenim  definit  el  conjunt  de  productes  que  formen  el  nostre  univers  de treball,  amb  funcionalitats  també  bàsiques  com  getters, setters, o alguna funció de traducció de ID a nom de producte o viceversa.
Per  poder  compartir  els  algoritmes,  s’ha  creat  la  classe  abstracte   Algorithm.  D’aquesta  en deriven  els  tres  algoritmes emprats  en  aquest  programa.  En  l’execució  del  programa  es  podrà triar quin algoritme es vol fer servir. El nostre grup ha implementat l’algorisme de  HillClimbing.
S’ha  creat  la  classe  corresponent  a  l’algorisme,  aquest  usa   un  array  de  arrays  d’enters  per definir  les  relacions  entre  els  nodes  i  un  vector  d’integers(un  vector  d’identificadors  per  poder treballar amb ells), d’aquesta manera amb l’algorisme podrem trobar una solució més òptima.
Per  crear  una  instància  de  HillClimbing s’utilitza  un  flag  per  determinar  si  es  circular (per donar servei  a  diferents  resolucions  que  un  pogués  volguer  d’aquest  algoritme  i  reutilitza’l),  i  una variable que indica els minuts que volem que duri l’execució d’aquest.
Una vegada tenim la instància creada podem aplicar l’algoritme. El mètode que ho fa té el mateix nom que la constructora però rep paràmetres diferents : un PROPGraph g, que representa les relacions entre diferents vèrtexs, una PROPList l que representa la solució inicial, i  una  altra  PROPList  que  serà la nostra solució final millorada (o no si no s’ha trobat cap solució més òptima).
Dins d’aquest mètode s’executa l’algoritme. Aquest es basa en que de la PROPList que ha 9 rebut  com  a  solució inicial,  es  tria  aleatòriament  un  element “i” des d’on s’iniciarà l’execució. Es calcularà  el  cost  de  la solució  que  es generaria  si s’intercanviés aquest element amb cadascun de  la  resta  d’elements  ”  j ”.  Si  aquest  cost  és  millor  que  l’inicial,  intercanviarà  l’element i­èssim amb el j­èssim.
Aquest procediment es fa fins que s’arribi a un nombre concret d’iteracions(determinat en la constructora)  o  a un temps prèviament establert. Quan acabem retornem la solució trobada que serà la millor fins a aquell moment.
10 4.Llista de funcionalitats implementades, i relació de diferències entre el que es proposava en el primer lliurament i el que finalment s’ha lliurat.
­Afegir Producte ­Guardar stock ­Guardar llista de productes seleccionats ­Carregar stock ­Carregar llista de productes seleccionats ­Mostrar l’stock amb el que treballem ­Calcular les similituds per defecte ­Personalitzar les similituds ­Executar Greedy ­Executar 2­aproximació.
­Executar Hill­Climbing.
­Treure un producte de la llista de productes seleccionats.
­Afegir un producte de la llista de productes seleccionats.
­Buscar producte.
­Visualitzar els atributs dels productes de l’stock.
­Mostrar similitud actual.
S’ha  respectat  bastant  les  opcions  definides  en les  entregues  anteriors.  Tanmateix hi  ha algunes opcions addicionals que no s’han aplicat, com per exemple, calcular estadístiques dels  productes més seleccionats o ordenar  segons només un  dels atributs. Tot i  així hem fet que  es  pogués personalitzar  el  grau  de similitud una cosa que també era adicional,així el programa es pot adaptar força bé al criteri dels nostres clients.
Hem continuat amb la idea de llistat de productes seleccionats on es poden treure o retirar productes  per  calcular el  seu ordre  òptim. D’aquesta manera  és més  fàcil i  visual  escollir productes de l’stock general.
Per  calcular  l’ordenació  s’havia  definit  a  la  primera   entrega  que  es  farien  dos aproximacions i opcionalment una optimització,  en aquest cas s’ha realitzat la optimització de Hill  Climbing. Aquesta  optimització es va dir  que  només  la deixariem  realitzar al client quan  tingués  pocs  productes, finalment vam decidir  que li deixariem  realitzar  sigués  quin sigués  el tamany dels seus productes seleccionats i li deixem escollir els minuts que ell vol executar l’optimització. D’aquesta manera li donem més llibertat al client.
Per acabar,  hem  afegit una  opció  que  no  haviem comentat  en  les atres entregues que és la  opció de  buscar producte. Aquesta opció és molt útil per poder consultar els atributs del producte i buscar­lo dins l’stock.
5.Relació de les classes implementades per cada membre del grup.
11 Tots els membres del grup han col∙laborat a l’elaboració dels codis, es fa difícil determinar qui ha fet cada classe ja que s’han anat modificant les classes diverses vegades.
6.Relació de les classes compartides pel clúster, amb indicació de quines han estat desenvolupades per cada grup.
S’ha compartit al clúster les classes abstractes Algorithm, PROPList i PROPGraph, que han estat implementades per tots els grups del clúster.
També s’ha compartit les classes corresponent als algoritmes de HillClimbing, 2­Aproximació i Greedy. El HillClimbing és l’algorisme implementat pel nostre grup. El 2­aproximació correspon al grup 1(ciutats), i el Greedy al grup 2(tasques).
12 ...