运筹学课程设计报告——精确一维搜索方法

问题描述

1.项目功能

运用0.618法(近似黄金分割法)、Fibonacci法(斐波那契法),根据已知条件,来解决一维搜索问题(线性搜索问题),求得函数最优值。

2.运用算法原理

0.618法(近似黄金分割法);

Fibonacci法(斐波那契法);

二.详细设计

10.618法(近似黄金分割法)

2Fibonacci法(斐波那契法)

 

三.源程序

1、0.618法(近似黄金分割法)

def gold(x):
    y=2*x**2-x-1
    return y
min = float(input("请输入下限"))
max = float(input("请输入上限"))
ans = float(input('请输入精确度'))
a = min + 0.618*(max - min)
b = min + 0.382*(max - min)
q = gold(a)
w = gold(b)
i = 0
while i < 10:
    print("i=%s" % i)
    print("min=%s,max=%s" % (min, max))
    print("x下限=%s,x上限=%s" % (a, b))
    print("y上限=%s,y上限=%s" % (w, q))
    c = max - min
    if c > ans:
        i = i + 1
        if q > w:
            max = a
            a = b
            b = min + 0.382*(max - min)
            q = w
            w = gold(b)
        else:#q
            min = b
            b = a
            a = min + 0.618 * (max - min)
            w = q
            q = gold(a)
    else:
        break

2、Fibonacci法(斐波那契法)

def fibonacci(n):
    i=0
    a = -1
    b = 3
    for i in range(n):
        i=i+1
        c = a+b
        a = b
        b = c
    return c
def bn(x):
    ert = x**2 - x + 2
    return ert
z = 2
p = 0
left = 0.00000
right = 10.00000
L1 = right - left
while z < 100:
    m = fibonacci(z)
    l = L1/m
    k = 1.000/m
    if k < 0.03:
        print("n=%s,Fn=%s"%(z,m))
        L2 = l*fibonacci(z-1)
        t = left + L2
        r = right -L2
        while p < 3:
            p = p + 1
            l3 = t - r
            e= bn(t)
            o = bn(r)
            if e>o :
                right = t
                t = r
                r = left + l3
            else:#o>e
                left = r
                r = t
                t = right - l3
        break
    else:
        z = z + 1

min=(left+right)/2
max=bn(min)
print(left)
print(right)
print("极小值x=",min)
print("极小值y=",max)

四.运行结果

1、0.618法(近似黄金分割法)

 

2、Fibonacci法(斐波那契法)

 

 

 

五.结论与总结

1、问题与解决

(1)在开始的时候,完全没有思路,在各种语言中不断切换,还尝试使用了matlab,最后在尝试中选择了较为熟悉的python.

(2)在两个一维搜索的代码中,都出现了对于循环嵌套的问题,导致迭代中断,最后通过网络查找学习相关知识后解决。

(3)在黄金分割法的时候,出现多次未迭代到最优解便停止的现象,最后严格对照课本,发现是判定条件不完全,导致的迭代失败,增加判定条件后解决

(4)在代码都正确后,又出现了运算结果与人工计算结果有极小的偏差的现象,经过分析,发现是因为人工计算的过程中便对某些数据进行了四舍五入,而计算机只会在最后一步进行四舍五入,所以导致了这极小的偏差。

2、心得体会

本次为期一周的课程设计,让我对最优化又有了新的认识与了解,之前都是学习课本知识,通过人工计算来解决问题,而与计算机结合后我发现可以更加迅速以及便捷的解决最优化问题,为生活带来了极大的便利。而本次我选择的精确一维搜索方法课题中,让我对黄金分割法和斐波那契额数列法有了更加深刻的认识,巩固了一遍知识,同时也学习到了更多的内容,以后在遇到相关问题的时候就可以直接使用计算机来解决问题,同时也对于这两个程序的代码更加熟悉,从中也可以举一反三,学习经验,以后在实现其他最优化方法的时候会更加的顺畅。

    总的来说,本次课设我收获了许多专业性的知识,同时也让我的计算机水平有所提高,对我来收收获十足,同时也感到十分不易,在西安疫情如此严重的时候,我们还能完成线上课程,这也使得这次课设的意义非凡。

猜你喜欢

转载自blog.csdn.net/m0_63975371/article/details/128176631