За игнорируемую петлю - PullRequest
0 голосов
/ 02 марта 2019

Я написал этот скрипт, но каждый раз, когда я нажимаю «Выполнить», все, что я получаю, это пустое изображение в выводе.И когда я пытаюсь напечатать списки или переменные внутри циклов for, ничего не печатается.если я удалю последнюю строку, я ничего не получу.Кажется, что мои циклы For не работают.Кто-нибудь может увидеть, что я сделал не так?

people = 100;
c = 3; (* number of connections to add to graph per person added*)
d = 1;  (* Number of people assigned randomly*)
ct =3; (* number of traits person must have in common *)
region = 11; (* Position of region percentage break down list *)
m={{0.48,0.52},{0.19,0.25,0.40,0.16},{0.36,30,34},
   {0.26,0.39,0.35},{0.18,32,32,18},{0.05,0.95},
   {0.13,0.87},{0.34,0.49,0.17},{0.27,0.23,0.01,0.24,0.03,0.07,0.15}, 
   {0.7,0.12,0.04,0.03,0.11},
   {0.19,0.23,0.37,0.21}};  (* List of list of % breakdowns of traits*)

randomchoice[matr_]:=Table[RandomChoice[matr[[i]]
-> Range[Length[matr[[i]]]]],{i,Length[matr]}]; 

PickTraits := RandomChoice[Range[Length[m]-1],ct];


listoflistoftraits = Table[randomchoice[m],people];

adjmat = {};

For[j,j<Range[Length[people]],1,
                commontraits = Table[listoflistoftraits[[j]], 
                                      {i,PickTraits}];
                ccount = 0;
                possibleconnections = {};
                possibleregionconnections = {};
                emptyc = {};
                For[k,k<people,1,
                        If[Count[listoflistoftraits[[k]],commontraits] = ct,
                            Append[possibleconnections,k] 
                           ,Unevaluated[Sequence[]] 
                           ];

If[listoflistoftraits[[k,Length[listoflistoftraits,region]]] = 
listoflistoftraits[[j,region]],
                           Append[possibleregionconnections,k] 
                           ,Unevaluated[Sequence[]]
                           ]
                      ];
                selected     = RandomChoice[possibleconnections,c-d];
                randomselect = RandomChoice[possibleregionconnections,d];
                connectionindices = Join[selected,randomselect];
                emptyc       = Table[If[MemberQ[connectionindices,i],1,0], 
                                    {i,people}];
                Append[adjmat,emptyc]

      ]

 AdjacencyGraph[adjmat]

1 Ответ

0 голосов
/ 03 марта 2019

@ Мурсиукэ прав.people - это Integer, поэтому Range[Length[people]] == {}.j не инициализируется никаким значением и нигде не увеличивается, поэтому цикл For никогда не прекратится.То же самое для цикла более k.Вы, вероятно, хотите что-то вроде

For[j = 1, j <= people, j++, ...]

Второй аргумент Count - это шаблон, commontraits - это список Integer, поэтому он никогда не будет соответствовать списку.Возможно, вы намеревались

Count[{listoflistoftraits[[k]]}, commontraits]

Length принимает только один аргумент, передаются два

Length[listoflistoftraits, region]

Не уверен, что вы намеревались.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...