⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 form6.frm

📁 交通规划的课程设计
💻 FRM
字号:
VERSION 5.00
Object = "{5E9E78A0-531B-11CF-91F6-C2863C385E30}#1.0#0"; "MSFLXGRD.OCX"
Begin VB.Form Form6 
   BackColor       =   &H80000013&
   Caption         =   "交通量分配"
   ClientHeight    =   8265
   ClientLeft      =   60
   ClientTop       =   450
   ClientWidth     =   11880
   ForeColor       =   &H00000000&
   LinkTopic       =   "Form6"
   ScaleHeight     =   8265
   ScaleWidth      =   11880
   StartUpPosition =   3  '窗口缺省
   Begin VB.CommandButton Command3 
      Caption         =   "生成Excel报表"
      BeginProperty Font 
         Name            =   "宋体"
         Size            =   10.5
         Charset         =   134
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   375
      Left            =   6600
      TabIndex        =   5
      Top             =   7560
      Width           =   1935
   End
   Begin VB.CommandButton Command2 
      Caption         =   "关  闭"
      BeginProperty Font 
         Name            =   "宋体"
         Size            =   10.5
         Charset         =   134
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   375
      Left            =   9120
      TabIndex        =   4
      Top             =   7560
      Width           =   1695
   End
   Begin VB.Data Data1 
      Caption         =   "Data1"
      Connect         =   "Access"
      DatabaseName    =   "..\traffic\traffic.mdb"
      DefaultCursorType=   0  '缺省游标
      DefaultType     =   2  '使用 ODBC
      Exclusive       =   0   'False
      Height          =   495
      Left            =   960
      Options         =   0
      ReadOnly        =   0   'False
      RecordsetType   =   1  'Dynaset
      RecordSource    =   "road"
      Top             =   7440
      Visible         =   0   'False
      Width           =   2895
   End
   Begin VB.CommandButton Command1 
      BackColor       =   &H80000012&
      Caption         =   "开 始 计 算"
      BeginProperty Font 
         Name            =   "宋体"
         Size            =   10.5
         Charset         =   134
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      Height          =   375
      Left            =   4200
      TabIndex        =   1
      Top             =   7560
      Width           =   1815
   End
   Begin MSFlexGridLib.MSFlexGrid MSFlexGrid1 
      Bindings        =   "Form6.frx":0000
      Height          =   6015
      Left            =   960
      TabIndex        =   0
      Top             =   1320
      Width           =   9855
      _ExtentX        =   17383
      _ExtentY        =   10610
      _Version        =   393216
      Rows            =   370
      Cols            =   10
      ForeColor       =   0
      GridColor       =   8388736
   End
   Begin VB.Label Label2 
      BackColor       =   &H80000013&
      Caption         =   "(本次计算用时稍长,请耐心等待……)"
      Height          =   255
      Left            =   4080
      TabIndex        =   3
      Top             =   960
      Width           =   3375
   End
   Begin VB.Label Label1 
      BackColor       =   &H80000013&
      Caption         =   "容量限制法计算交通量分配"
      BeginProperty Font 
         Name            =   "方正琥珀简体"
         Size            =   24
         Charset         =   134
         Weight          =   400
         Underline       =   0   'False
         Italic          =   0   'False
         Strikethrough   =   0   'False
      EndProperty
      ForeColor       =   &H00004080&
      Height          =   615
      Left            =   2880
      TabIndex        =   2
      Top             =   240
      Width           =   6015
   End
End
Attribute VB_Name = "Form6"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Sub Command1_Click()

Command1.Enabled = False

Dim Lij(619, 619) '两节点间距离
Dim Vij(619, 619) '两节点间走行速度
Dim Taij(619, 619) '两节点间走行时间
Dim Cij(619, 619) '两节点间容量
Dim tij(619, 619) '小区节点交通分布量
Dim qa(619, 619) '两节点交通量
Dim V(370)
Dim O(370)
Dim D(370)
Dim L(370)
Dim Ca(370)
Dim path(619) '又最短路到某点的前一点
Dim times '总循环次数
Dim dot(23) '小区中心点
Const node = 619 '节点上限数字

'将msflexgrid1中的数据读出赋给变量
With MSFlexGrid1
For i = 1 To 370
    L(i) = .TextMatrix(i, 4)
    O(i) = .TextMatrix(i, 2)
    D(i) = .TextMatrix(i, 3)
    V(i) = .TextMatrix(i, 5)
    Ca(i) = .TextMatrix(i, 7)
Next i

For x = 1 To 619
For y = 1 To 619
    Lij(x, y) = 32767
    Cij(x, y) = 1
    Vij(x, y) = 1
    qa(x, y) = 0
Next y
Next x

For i = 1 To 370
    Lij(O(i), D(i)) = L(i)
    Vij(O(i), D(i)) = V(i)
    Cij(O(i), D(i)) = Ca(i)
Next i
End With

'将路网图上小区中心编号重新排列成序

dot(1) = 2: dot(2) = 201: dot(3) = 213: dot(4) = 208: dot(5) = 311
dot(6) = 304: dot(7) = 424: dot(8) = 501: dot(9) = 134: dot(10) = 97
dot(11) = 100: dot(12) = 28: dot(13) = 55: dot(14) = 619: dot(15) = 70
dot(16) = 65: dot(17) = 104: dot(18) = 63: dot(19) = 135: dot(20) = 136
dot(21) = 137: dot(22) = 138: dot(23) = 139

Dim m, n As Integer
m = 0
n = 0
times = 1

'由全局变量中导入tij的值
For i = 1 To 23
For j = 1 To 23
tij(dot(i), dot(j)) = T(i, j)
Next j
Next i

'以下交通分配量计算开始
Do

For i = 1 To 23 '将23个小区中心点循环作V0

Dim V0
Dim u, vnum, w, min
Dim distance(619) '记录从源点到其他各点当前的最短路径
Dim s(619)
Max = 32767 'max表示如果两点间不相邻,则时间为无穷大

V0 = dot(i)

For w = 1 To node
    path(w) = 0
    distance(w) = Taij(V0, w)
    If Taij(V0, w) < 32767 Then path(w) = V0
    s(w) = 0
    s(V0) = 1
Next w

vnum = 1 '集合中s定点个数为1,即只有一个点v0


Do
'循环终止条件就是最后只剩一个点,那就没有选择余地
min = Max
u = V0
    For w = 1 To node
        If s(w) = 0 And distance(w) < min Then
        u = w
        min = distance(w) '寻找最小的distance(w),找u
        End If
    Next w
    
    s(u) = 1
    
    For w = 1 To node
        If s(w) = 0 And distance(u) + Taij(u, w) < distance(w) Then
        distance(w) = distance(u) + Taij(u, w) '调整非s点集合点的最短路径值
        path(w) = u
        End If
    Next w
        
        vnum = vnum + 1
        
Loop Until vnum = 232

For j = 1 To 23
If dot(i) = dot(j) Then Exit For
n = dot(j)
m = path(n)
 
Do
qa(m, n) = qa(m, n) + tij(dot(i), dot(j)) / 4 '小组号+1
qa(O(i), D(j)) = qa(m, n)
n = path(n)
m = path(n)
Loop Until n = dot(i)
Next j
Next i

For x = 1 To node
For y = 1 To node
Taij(x, y) = 32767
Next y
Next x

For i = 1 To 370
    Lij(O(i), D(i)) = L(i)
    Vij(O(i), D(i)) = V(i)
    Cij(O(i), D(i)) = Ca(i)
    Taij(O(i), D(i)) = Lij(O(i), D(i)) / Vij(O(i), D(i)) * (1 + 2.62 * (qa(O(i), D(j)) / Cij(O(i), D(i)))) 'BPR函数
    Taij(D(i), O(i)) = Taij(O(i), D(i))
    If Cij(O(i), D(i)) <= qa(O(i), D(i)) Then
    Taij(O(i), D(i)) = 32767
    qa(O(i), D(i)) = Cij(O(i), D(i))
    End If
Next i

times = times + 1

Loop Until times > 4

With MSFlexGrid1
For i = 1 To 370
.TextMatrix(i, 9) = Format(qa(O(i), D(i)), ".00")
Next i
End With

MsgBox "恭喜你,交通量分配计算完毕!", , "计算完毕"

Command1.Enabled = False
Command2.Enabled = True
Command3.Enabled = True
End Sub

Private Sub Command2_Click()
Unload Form6
End Sub

Private Sub Command3_Click()
Dim i As Integer
Dim j As Integer
Dim xlApp As Excel.Application
Dim xlBook As Excel.Workbook
Dim xlSheet As Excel.Worksheet

Set xlApp = CreateObject("Excel.Application")
xlApp.Visible = True
Set xlBook = xlApp.Workbooks.Add
On Error Resume Next
Set xlBook = xlApp.Workbooks.Add
Set xlSheet = xlBook.Worksheets(1)

For i = 0 To 370 '网格数
MSFlexGrid1.Row = i
For j = 1 To 9
MSFlexGrid1.Col = j

If IsNull(MSFlexGrid1.Text) = False Then
xlSheet.Cells(i + 1, j) = MSFlexGrid1.Text
End If
Next j
Next i
Exit Sub
End Sub

Private Sub Form_Load()
Command2.Enabled = False
Command3.Enabled = False
 '调整网格的宽度
MSFlexGrid1.ColWidth(0) = 120
MSFlexGrid1.ColWidth(4) = 1200
MSFlexGrid1.ColWidth(7) = 1200
MSFlexGrid1.ColWidth(8) = 1200
MSFlexGrid1.ColWidth(9) = 1200
End Sub

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -