Untitled

 avatar
unknown
python
15 days ago
2.4 kB
9
Indexable
import numpy as np

# Khởi tạo các tham số
x = np.random.rand(10)  # X là vị trí ngẫu nhiên trong không gian
v = np.random.rand(10)  # v là vector vận tốc tương ứng với tọa độ
c1 = 0.5  # Hệ số học tập 1
c2 = 0.5  # Hệ số học tập 2
G = float('inf')  # Giá trị tốt nhất toàn cục ban đầu (vô cùng lớn)
XG = 0  # Vị trí tốt nhất toàn cục ban đầu
xB = np.copy(x)  # Vị trí tốt nhất của từng hạt
pB = np.full(10, float('inf'))  # Giá trị tốt nhất của từng hạt ban đầu (vô cùng lớn)

# Giới hạn vận tốc và vị trí
v_max = 1.2
v_min = 0.01
x_min = 5
x_max = 13

# Số vòng lặp
num_iterations = 2500

print("Nhập hàm mục tiêu sử dụng biến `x` (ví dụ: x*np.cos(x) - 0.5*x*np.cos(0.6*x**2)):")
user_input = input("Hàm mục tiêu: ")

# Chuyển chuỗi nhập vào thành hàm mục tiêu
def test(x):
    try:
        return eval(user_input)  # Đánh giá biểu thức nhập vào
    except Exception as e:
        raise ValueError("Hàm mục tiêu không hợp lệ! Vui lòng nhập lại.") from e

# Thuật toán PSO
for j in range(num_iterations):  # Lặp qua từng thế hệ
    for i in range(10):  # Lặp qua từng hạt
        # Sinh các số ngẫu nhiên
        r1 = np.random.rand()
        r2 = np.random.rand()

        # Cập nhật vận tốc
        v[i] += c1 * r1 * (XG - x[i]) + c2 * r2 * (xB[i] - x[i])

        # Giới hạn vận tốc
        if v[i] > v_max:
            v[i] = v_max
        elif v[i] < v_min:
            v[i] = v_min

        # Cập nhật vị trí
        x[i] += v[i]

        # Giới hạn vị trí
        if x[i] > x_max:
            x[i] = x_max
        elif x[i] < x_min:
            x[i] = x_min

        # Tính giá trị hàm mục tiêu tại vị trí hiện tại
        p = test(x[i])

        # Cập nhật vị trí và giá trị tốt nhất của từng hạt
        if p < pB[i]:
            pB[i] = p
            xB[i] = x[i]

    # Cập nhật vị trí và giá trị tốt nhất toàn cục
    min_pB = np.min(pB)
    if min_pB < G:
        G = min_pB
        XG = xB[np.argmin(pB)]

# Kết quả
print(f"Giá trị tốt nhất toàn cục: {G}")
print(f"Vị trí tốt nhất toàn cục: {XG}")
Leave a Comment