zankastelic / problem_najvecjega_pretoka_FP

Projekt pr FP-ju
0 stars 2 forks source link

Problem pri geometrijskih grafih #3

Open laravidmar opened 3 years ago

laravidmar commented 3 years ago

Pozdravljeni, zopet imava težavo in sicer v datoteki pretok.R. Imava napisano funkcijo igraf_razdalje_so_utezi, ki naj bi naredila igraph tako, da je prva točka tista, ki je najbližje izhodišču, zadnja pa najbolj oddaljena od izhodišča. Težava nastopi, ko poženeva funkcijo tabela_odstrani_tocke_geom iz datoteke generiranje_podatkov.R. Preden sva popravila začetno in končno točko (najbližja izhodišču = 1, najdlje od izhodišča = max številu točk) v igraf_razdalje_so_utezi je funkcija tabela_odstrani_tocke_geom v večini primerih delala. Ta funkcija je skoraj identična tabela_odstrani_tocke, katera dela, pri navadni pretvorbi v igraph, pri geomtrijskih pa ne. Napako nama javlja kot: Error in oceti_in_sinovi(matrika)[, 3] : incorrect number of dimensions.

Hvala za pomoč, lep pozdrav Žan Kastelic in Lara Vidmar

jaanos commented 3 years ago

Kolikor vidim, postavljanje najbližje in najbolj oddaljene točke na pravo mesto ne deluje pravilno, saj primerjata koordinate z indeksi (npr. x != a). Če želita najbližjo točko postaviti na prvo mesto, lahko naredita enostavno

  x <- c(x[najblizja], x[-najblizja])
  y <- c(y[najblizja], y[-najblizja])

Na podoben način lahko premakneta tudi najbolj oddaljeno točko.

Sicer pa, kolikor vidim, do napake pride v primeru, ko je v grafu ena sama povezava. Da dosežeta, da funkcija oceti_in_sinovi vrača ustrezno matriko, jo končajta tako:

  return(matrix(matrika_oce_sin, ncol=3))

Še to: pazita, da po nepotrebnem ne kličeta funkcij večkrat - npr. v pretvorba_v_igraph kličeta oceti_in_sinovi dvakrat, a bi lahko utezi dobila že iz spremenljivke povezave. Število vrstic in stolpcev matrike lahko dobita s funkcijama nrow in ncol - tako vama ni potrebno koreniti dolžine matrike, da dobita število vozlišč v grafu (ta pristop je potencialno numerično nestabilen).

laravidmar commented 3 years ago

Hvala za odgovor. Lep pozdrav