31. maj 2008 - 12:12Der er
4 kommentarer og 1 løsning
Udarbejdelse beslutningsmodel til automatisk prioritering
Jeg er ved at udarbejde en række beslutningsmodeller, som skal udarbejdes automatisk på baggrund af noget importeret data. Det jeg mangler er en mekanisme til at foretage en prioritering mellem nogle alternativer. Jeg skal bruge de X bedste alternativer og der er Y alternativer. Dataen omkring dem er fordelt således at de forskellige alternativer, at de er blevet prioriteret i en række fra 1 til x - dataen er summeret i forhold til hvad det enkelte alternativ har fået af prioritet 1 til prioritet x.
Jeg ønsker så at der foretages en sortering således at der indledningsvist skal ses på prioritet 1 - her ses om et alternativ har opnået et antal første prioriteringer der overstiger en fordelingsnøgle.
Herved skal der foretages en sekvensiel optælling hvor der først ses på 1. prioritet, så 2. osv. ind til x. prioriteten. Det er vigtigt at der først ses på prioritet, dernæst på fordelingsnøglen og mellem x pladsen og x+1 så skal der ses på næste prioritet...
Ved godt det lyder meget forvirrende - og vil meget gerne supplere med uddybende oplysninger eller sende mit dokument. Det må gerne laves via en VBA som manuelt skal aktiveres
Jeg har forsøgt mig med at lave en kode, hvor jeg så at sige "indkoder" ved hvilken prioritet det enkelte opnår en vurdering over fordelingsnøglen - og så spytter dem ud i en række. Problemet er blot, at den ikke sammenligner de forskellige tal for i tilfælde af stemmelighed mellem alternativerne så skal der ses på næste prioritet! Det er således vigtigt at jeg får at vide hvilken række følge alternativerne prioriteres i - og ikke blot hvilke x alterntiver jeg skal vælge.
---
For i = 1 To antal_alternativer(x) y = 0 Fordelingsnøgle = Range("A2").Value For x = 1 To pladser stemmer(i, x) = Range("A2").Offset(i, x).Value y = y + stemmer(i, x) If Not y < FT Then t_navn(i) = Range("a2").Offset(i, 0).Value t_plads(i) = x t_stemmer(i) = y x = pladser End If Next x Next i
For i = 1 To kandidat_antal(1) Range("A20").Offset(i, 0).Select With ActiveCell .Value = t_navn(i) .Offset(0, 1).Value = t_plads(i) .Offset(0, 2).Value = t_stemmer(i) End With Next i
og så retter jeg lige i forhold til at variablerne hedder det samme ;)
For i = 1 To antal_alternativer(x) y = 0 Fordelingsnøgle = Range("A2").Value For x = 1 To pladser stemmer(i, x) = Range("A2").Offset(i, x).Value y = y + stemmer(i, x) If Not y < Fordelingsnøgle Then t_navn(i) = Range("a2").Offset(i, 0).Value t_plads(i) = x t_stemmer(i) = y x = pladser End If Next x Next i
For i = 1 To antal_alternativer(i) Range("A20").Offset(i, 0).Select With ActiveCell .Value = t_navn(i) .Offset(0, 1).Value = t_plads(i) .Offset(0, 2).Value = t_stemmer(i) End With Next i
For x = 1 To pladser For i = 1 To antal_kandidater If brugt_dummy(i) = 0 Then If Not k_stemmer(i, x + 1) < FT Then plads(t) = k_stemmer(i, 1) valgt(t) = x brugt_dummy(i) = 1 t = t + 1 If t - 1 = pladser + 1 Then For t_test = 1 To pladser If valgt(t_test) = valgt(pladser + 1) Then brugt_dummy(t_test) = 0 t = t - 1 End If Next t_test
End If End If End If Next i Next x
Der er dog stadigvæk nogle problemer når den skal vurdere Xpladsen med X+1, X+2 osv. har et eksemp hvor der er lighed mellem 7 & 8 pladsen alternativ 1 og 5 i prioritet 4. Der skal den så se på prioritet 5 hvor der nu er lighed mellem alternativ 1, 5 og 10. I prioritet 6 er der ikke længere lighed da alterntivt 1 har flest - derfor skal den indkode Alternativ 1 som Plads (7) og Valgt (7) skal være 6....
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.