在VB .Net中通过循环操作初始化多维数组

时间:2011-11-14 09:45:11

标签: vb.net loops genetic-algorithm

如何在VB .Net中通过循环操作初始化多维数组?

我有一些名为'Room','Subject'和'Population'的数组。

  1. 数组'房间',包含房间的名称,即

    {"RoomA", "RoomB"}
    
  2. 数组'主题',包含主题的名称,即

    {"English", "Mathematic", "Physics", "Biology"}
    
  3. 数组'Population'是一个多维数组,包含从数组'Room'中获取的随机化空间。即{("RoomA", "RoomA", "RoomA", "RoomA"), ("RoomA", "RoomA", "RoomA", "RoomB"), ("RoomB", "RoomA", "RoomB", "RoomB"), .....}。数组的长度基于生成值和主题的长度。

  4. 我已经尝试过这段代码但是没有运气:

    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”代码。你能帮我解决这个问题吗?

    此代码用于初始化起始值,使用紧凑遗传算法来优化问题,以优化课堂的使用。有谁知道这个方法?如果是的话,您想与我分享知识吗?我试图搜索几种材料,但仍无法将其实现到代码上。

2 个答案:

答案 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优化基本功能的示例。