Function u(s As Single, th1, th2, cp As Single, yp1 As Single, yp2 As Single) As Single
Dim lx As Single
Dim cx As Single
Dim px As Single
l1 = yp1 / th1(s)
l2 = yp2 / th2(s)
cx = cp
px = 0
If cx < 0.01 Then px = 1
If l1 > 0.99 Then px = 1
If l2 > 0.99 Then px = 1
If px = 1 Then cx = 0.5
If px = 1 Then l1 = 0.5
If px = 1 Then l2 = 0.5
ux = Log(cx) + Log(1 - l1) + Log(1 - l2)
If px = 1 Then ux = -999
u = ux
End Function
Function bud(th1, th2, c, y1, y2) As Single
Dim b1 As Single
Dim s As Single
Dim m1 As Single
Dim m2 As Single
b1 = 0
For s = 1 To 100
m1 = mprefer(s, th1, th2, c, y1, y2)
m2 = fprefer(s, th1, th2, c, y1, y2)
b1 = b1 + y1(m1) + y2(m2) - c(m1, m2)
Next
bud = b1
End Function
Function wel(th1, th2, c, y1, y2) As Single
Dim w1 As Single
Dim s As Single
Dim m As Single
Dim c1 As Single
Dim my As Single
Dim fy As Single
w1 = 0
For s = 1 To 100
m1 = mprefer(s, th1, th2, c, y1, y2)
m2 = fprefer(s, th1, th2, c, y1, y2)
c1 = c(m1, m2)
my = y1(m1)
fy = y2(m2)
w1 = w1 + u(s, th1, th2, c1, my, fy)
Next
wel = w1
End Function
Function fprefer(s As Single, th1, th2, c, y1, y2) As Single
Dim m As Single
Dim maxu As Single
Dim maxm As Single
Dim u1 As Single
Dim c1 As Single
Dim my As Single
Dim fy As Single
maxu = -999
For m1 = 0 To 10
For m2 = 0 To 10
c1 = c(m1, m2)
my = y1(m1)
fy = y2(m2)
u1 = u(s, th1, th2, c1, my, fy)
If u1 > maxu Then maxm = m2
If u1 > maxu Then maxu = u1
Next
Next
fprefer = maxm
End Function
Function mprefer(s As Single, th1, th2, c, y1, y2) As Single
Dim m As Single
Dim maxu As Single
Dim maxm As Single
Dim u1 As Single
Dim c1 As Single
Dim my As Single
Dim fy As Single
maxu = -999
For m1 = 0 To 10
For m2 = 0 To 10
c1 = c(m1, m2)
my = y1(m1)
fy = y2(m2)
u1 = u(s, th1, th2, c1, my, fy)
If u1 > maxu Then maxm = m1
If u1 > maxu Then maxu = u1
Next
Next
mprefer = maxm
End Function
Private Sub Command1_Click()
Dim s As Single
Dim m As Single
Dim th1(1 To 100) As Single
Dim th2(1 To 100) As Single
Dim y1(0 To 10) As Single
Dim y2(0 To 10) As Single
Dim c(0 To 10, 0 To 10) As Single
Dim tl As Single
Dim tk As Single
Dim tr As Single
Dim s1 As Single
s1 = 1
s2 = 1
For s = 1 To 100
th1(s) = 0.2 * s1
th2(s) = 0.1 * s2
s1 = s1 + 1
If s1 = 11 Then s2 = s2 + 1
If s1 = 11 Then s1 = 1
Next
Open "c:/51.txt" For Input As #1
Do Until EOF(1)
Input #1, a1, a2, a3
m1 = a1
m2 = a2
c(m1, m2) = a3
Loop
Close #1
For m = 0 To 10
y1(m) = 0.1 * m
Next
For m = 0 To 10
y2(m) = 0.05 * m
Next
For s = 1 To 100
m1 = mprefer(s, th1, th2, c, y1, y2)
m2 = fprefer(s, th1, th2, c, y1, y2)
Debug.Print s, m1, m2
Next
End Sub
最終更新:2009年10月17日 08:35