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

📄 form1.frm

📁 运筹学中的解线性规划问题的一种方法
💻 FRM
📖 第 1 页 / 共 2 页
字号:
         Height          =   270
         Index           =   1
         Left            =   4080
         TabIndex        =   22
         Top             =   720
         Width           =   1815
      End
      Begin VB.TextBox Text3 
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   10.5
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   270
         Index           =   0
         Left            =   2040
         TabIndex        =   21
         Top             =   720
         Width           =   1815
      End
      Begin VB.TextBox Text2 
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   10.5
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   270
         Index           =   8
         Left            =   6120
         TabIndex        =   20
         Top             =   3240
         Width           =   495
      End
      Begin VB.TextBox Text2 
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   10.5
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   270
         Index           =   7
         Left            =   4080
         TabIndex        =   19
         Top             =   3240
         Width           =   495
      End
      Begin VB.TextBox Text2 
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   10.5
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   270
         Index           =   6
         Left            =   2040
         TabIndex        =   18
         Top             =   3240
         Width           =   495
      End
      Begin VB.TextBox Text2 
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   10.5
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   270
         Index           =   5
         Left            =   6120
         TabIndex        =   17
         Top             =   1680
         Width           =   495
      End
      Begin VB.TextBox Text2 
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   10.5
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   270
         Index           =   4
         Left            =   4080
         TabIndex        =   16
         Top             =   1680
         Width           =   495
      End
      Begin VB.TextBox Text2 
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   10.5
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   270
         Index           =   3
         Left            =   2040
         TabIndex        =   15
         Top             =   1680
         Width           =   495
      End
      Begin VB.TextBox Text2 
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   10.5
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   270
         Index           =   2
         Left            =   6120
         TabIndex        =   14
         Top             =   240
         Width           =   495
      End
      Begin VB.TextBox Text2 
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   10.5
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   270
         Index           =   1
         Left            =   4080
         TabIndex        =   13
         Top             =   240
         Width           =   495
      End
      Begin VB.TextBox Text2 
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   10.5
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   270
         Index           =   0
         Left            =   2040
         TabIndex        =   12
         Top             =   240
         Width           =   495
      End
      Begin VB.Label Label2 
         Caption         =   "迭代次数"
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   10.5
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   255
         Index           =   8
         Left            =   240
         TabIndex        =   44
         Top             =   3240
         Width           =   975
      End
      Begin VB.Label Label2 
         Caption         =   "迭代点Xk"
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   10.5
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   255
         Index           =   7
         Left            =   240
         TabIndex        =   43
         Top             =   3720
         Width           =   975
      End
      Begin VB.Label Label2 
         Caption         =   "迭代点处函数值"
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   10.5
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   255
         Index           =   6
         Left            =   240
         TabIndex        =   42
         Top             =   4200
         Width           =   1575
      End
      Begin VB.Label Label2 
         Caption         =   "迭代次数"
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   10.5
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   255
         Index           =   5
         Left            =   240
         TabIndex        =   41
         Top             =   1680
         Width           =   975
      End
      Begin VB.Label Label2 
         Caption         =   "迭代点Xk"
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   10.5
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   255
         Index           =   4
         Left            =   240
         TabIndex        =   40
         Top             =   2160
         Width           =   975
      End
      Begin VB.Label Label2 
         Caption         =   "迭代点处函数值"
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   10.5
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   255
         Index           =   3
         Left            =   240
         TabIndex        =   39
         Top             =   2640
         Width           =   1575
      End
      Begin VB.Label Label2 
         Caption         =   "迭代点处函数值"
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   10.5
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   255
         Index           =   2
         Left            =   240
         TabIndex        =   11
         Top             =   1200
         Width           =   1575
      End
      Begin VB.Label Label2 
         Caption         =   "迭代点Xk"
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   10.5
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   255
         Index           =   1
         Left            =   240
         TabIndex        =   10
         Top             =   720
         Width           =   975
      End
      Begin VB.Label Label2 
         Caption         =   "迭代次数"
         BeginProperty Font 
            Name            =   "宋体"
            Size            =   10.5
            Charset         =   134
            Weight          =   700
            Underline       =   0   'False
            Italic          =   0   'False
            Strikethrough   =   0   'False
         EndProperty
         Height          =   255
         Index           =   0
         Left            =   240
         TabIndex        =   9
         Top             =   240
         Width           =   975
      End
   End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Dim note As Integer

Private Sub Form_Load()
Dim X_k_0(1 To 2) As Double '定义变量Xk
Dim X_k_1(1 To 2) As Double '定义变量Xk+1
Dim S_k(1 To 2) As Double '定义搜索方向Sk
Dim Ⅴf_X(1 To 2) As Double '定义梯度Ⅴf(X)
Dim g_X_k_0(1 To 2) As Double '梯度Ⅴf(X)的另一表示方法
Dim g_X_k_1(1 To 2) As Double '梯度Ⅴf(X)的另一表示方法
Dim f_X As Double '定义函数值f(X)
Dim f_X_k_0 As Double '定义函数值f(Xk)
Dim f_X_k_1 As Double '定义函数值f(Xk+1)
Dim g_kTS_k_0 As Double
Dim g_kTS_k_1 As Double
Dim iterative As Integer '定义迭代次数
Dim X1 As Double '定义自变量X1
Dim X2 As Double '定义自变量X2
Dim i As Integer '计数变量
Dim j As Integer '计数变量
Dim C1 As Double '经验常数
Dim C2 As Double '经验常数
Dim b As Double '交换变量
Dim λ As Double '定义步长

note = 0

X_k_0(1) = Text1(4).Text
X_k_0(2) = Text1(5).Text
S_k(1) = Text1(6).Text
S_k(2) = Text1(7).Text

X1 = X_k_0(1)
X2 = X_k_0(2)
f_X = 100 * (X2 - X1 * X1) * (X2 - X1 * X1) + (1 - X1) * (1 - X1) '函数表达式
Ⅴf_X(1) = 200 * (X2 - X1 * X1) * (-2 * X1) - 2 * (1 - X1) '梯度表达式
Ⅴf_X(2) = 200 * (X2 - X1 * X1) '梯度表达式
g_X_k_0(1) = Ⅴf_X(1)
g_X_k_0(2) = Ⅴf_X(2)
f_X_k_0 = f_X '计算Xk对应的函数值

g_kTS_k_0 = g_X_k_0(1) * S_k(1) + g_X_k_0(2) * S_k(2)
C1 = 0.1 '经验常数
C2 = 0.5 '经验常数
a = 0
b = 100000000
λ = 1 '初始步长

For iterative = 1 To 1000 '开始迭代
    Text2(note).Text = Format(iterative, "#") '输出迭代次数
    For i = 1 To 2 '计算新的Xk+1
        X_k_1(i) = X_k_0(i) + λ * S_k(i)
    Next i
    Text3(note).Text = Format(X_k_1(1), "#.####") & " " & Format(X_k_1(2), "#.####")  '输出迭代点
    X1 = X_k_1(1)
    X2 = X_k_1(2)
    f_X = 100 * (X2 - X1 * X1) * (X2 - X1 * X1) + (1 - X1) * (1 - X1) '函数表达式
    f_X_k_1 = f_X '计算Xk+1对应的函数值
    Text4(note).Text = Format(f_X_k_1, "###.###") '输出迭代点处的函数值

    If ((f_X_k_0 - f_X_k_1) < C1 * λ * g_kTS_k_0) Then
        b = λ
        λ = (λ + a) / 2
    Else '满足条件1
        Ⅴf_X(1) = 200 * (X2 - X1 * X1) * (-2 * X1) - 2 * (1 - X1) '梯度表达式
        Ⅴf_X(2) = 200 * (X2 - X1 * X1) '梯度表达式
        g_X_k_1(1) = Ⅴf_X(1)
        g_X_k_1(2) = Ⅴf_X(2)
        g_kTS_k_1 = g_X_k_1(1) * S_k(1) + g_X_k_1(2) * S_k(2)
        If (g_kTS_k_1 > C2 * g_kTS_k_0) Then '满足条件1和2
            MsgBox ("优化完毕!")
            Exit For
        Else '不满足条件2
            a = λ
            If (2 * λ < (λ + b) / 2) Then
                λ = 2 * λ
            Else
                λ = (λ + b) / 2
            End If
        End If
    End If
    note = note + 1
Next iterative
End Sub

⌨️ 快捷键说明

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