Инициализировать многомерный массив с помощью цикла в VB .Net - PullRequest
2 голосов
/ 14 ноября 2011

Как инициализировать многомерный массив с помощью операции цикла в VB .Net?

У меня есть несколько массивов, которые называются «Комната», «Предмет» и «Население».

  1. Массив 'Комната', содержит название комнаты, т.е.

    {"RoomA", "RoomB"}
    
  2. Массив 'Subject', содержит название субъекта, т.е.

    {"English", "Mathematic", "Physics", "Biology"}
    
  3. Массив «Население» - это многомерный массив, содержащий случайную комнату, взятую из массива «Комната». то есть {("RoomA", "RoomA", "RoomA", "RoomA"), ("RoomA", "RoomA", "RoomA", "RoomB"), ("RoomB", "RoomA", "RoomB", "RoomB"), .....}. Длина массива основана на сгенерированном значении и длине субъекта.

Я пробовал этот код, но не повезло:

Dim i, j As Integer
Dim TotalSubject As Integer = Subject.Count() 
Dim TotalRoom As Integer = Room.Count() 

Dim Population(,) As String
ReDim Population(generate, TotalSubject) 'Give the 'Population' bound

For i = 0 To generate
    For j = 0 To TotalSubject
        Dim Randomize As Integer = Rnd() * TotalRoom
        Population(i, j) = Room(Randomize) '----- ERROR HERE -----'
    Next j
Next i

Но пока я выполняю код, он получает сообщение об ошибке «IndexOutOfRangeException ishandled», указывающее на отмеченный выше код «ОШИБКА ЗДЕСЬ». Можете ли вы помочь мне решить эту проблему?

Этот код для инициализации начального значения используется Компактный генетический алгоритм для задачи оптимизации для оптимизации использования классной комнаты. Кто-нибудь знает этот метод? Если да, не хотите ли поделиться своими знаниями со мной? Я пытался найти несколько материалов для этого, но до сих пор не могу внедрить его в код.

Ответы [ 2 ]

2 голосов
/ 14 ноября 2011

Ошибка с Room(Randomize), а не с вашим массивом.

Вы утверждаете, что Room является массивом, но ваш код включает Room.Count(). Массивы имеют длину, а не счет. Поэтому я предполагаю, что Комната - это своего рода коллекция. Затем, ваше случайное число Randomize (назначенное Rnd() * TotalRoom) имеет диапазон от 0 до TotalRoom, где TotalRoom равно Room.Count(). Таким образом, если ваша коллекция основана на нуле, то вы получаете индекс вне пределов, когда вы случайным образом генерируете значение, равное количеству ваших коллекций. И если ваша коллекция основана на 1, то вы получаете индекс вне пределов, когда вы случайным образом генерируете 0.

0 голосов
/ 22 марта 2015

Для компактных генетических алгоритмов вы можете прочитать пионерскую исследовательскую работу Харика, Лобо и Голдберга:

Харик, Жорж Р., Фернандо Дж. Лобо и Дэвид Э. Голдберг«Компактный генетический алгоритм».Эволюционные вычисления, транзакции IEEE 3.4 (1999): 287-297.

Поскольку это не напрямую , связанное с .NET, вы можете иметьпосмотрите на небольшой кусочек кода в пакете R.Файл C ++ ccga.cpp в каталоге src содержит 60 строк. Cran Package - eive

Здесь есть запись в блоге здесь , которая включает примеры для оптимизации основных функций с использованием cga на языке R.

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