如何在VB .Net中通过循环操作初始化多维数组?
我有一些名为'Room','Subject'和'Population'的数组。
数组'房间',包含房间的名称,即
{"RoomA", "RoomB"}
数组'主题',包含主题的名称,即
{"English", "Mathematic", "Physics", "Biology"}
数组'Population'是一个多维数组,包含从数组'Room'中获取的随机化空间。即{("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未处理”指向上面标记的“ERROR HERE”代码。你能帮我解决这个问题吗?
此代码用于初始化起始值,使用紧凑遗传算法来优化问题,以优化课堂的使用。有谁知道这个方法?如果是的话,您想与我分享知识吗?我试图搜索几种材料,但仍无法将其实现到代码上。
答案 0 :(得分:2)
错误与Room(Randomize)
不符合您的数组。
您声明Room是一个数组,但您的代码包含Room.Count()
。数组有长度,而不是计数。因此我的猜测是Room是某种收藏品。接下来,您的随机数Randomize
(由Rnd() * TotalRoom
指定)的范围为0到TotalRoom,其中TotalRoom
等于Room.Count()
。因此,如果您的集合为零,那么当您随机生成等于集合计数的值时,您将获得索引越界。如果你的集合是基于1的,那么当你的randomaly生成0时你就会得到索引。
答案 1 :(得分:0)
对于紧凑型遗传算法,您可以阅读Harik,Lobo和Goldberg的先驱研究论文:
Harik,Georges R.,Fernando G. Lobo和David E. Goldberg。 “该 紧致遗传算法。“进化计算,IEEE 交易3.4(1999):287-297。
由于它不是直接 相关到.NET,您可以查看R package eive中的一小段代码。 src目录中的C ++文件ccga.cpp是60行。 Cran Package - eive
有一个博客条目here,其中包含使用R语言中的cga优化基本功能的示例。