有效集算法python实现

本文提供了Python版本的有效集算法实现,用于求解不等式约束问题。算法仅处理不等式约束Ax >= b,未涵盖等式约束。使用者需提供H、c、A和b作为输入来计算最优点。
摘要由CSDN通过智能技术生成

本文实现python版本的有效集算法,有效集算法的原理暂不介绍。

# coding=utf-8
# 有效集算法实现,解决二次规划问题
# min 1/2x.THx+c.Tx
# s.t. Ax>=b
import numpy as np


class Active_set(object):
    def __init__(self, H, c, A, b):
        self.H = H
        self.c = c
        self.A = A
        self.b = b
        self.epsilon = 1e-6

    def initial_set(self):
        # 选定初始有效集和初始可行解
        # 为了简单只选择第一行
        activae_set_rows = [0]

        # 初始可行解为满足第一个等式的任意解
        # 只需要找到第一个不为0的系数,让其他的变量都为0就可以了
        # np.where返回tuple,第一个元素是索引列表,第二个元素是数据类型,因此需要[0][0]
        index = np.where(self.A[0] != 0)[0][0]
        value = self.A[0][index]
        feasible_x = np.zeros(len(self.A[0]))
        feasible_x[index] = self.b[0][0]/float(value)

        feasible_x = feasible_x.reshape(-1, 1)

        return activae_set_rows, feasible_x
        return [2, 4], np.array([[2], [0]], dtype=np.float64)

    def calculate_delta(self, x):
        # 计算在x处的导数
        return np.matmul(self.H, x) + self.c

    def find_active_set(self):
        activate_set_rows, feasible_x = self.initial_set()
        steps = 0
        while True:
            steps += 1
            print("steps is {}".format(steps))

            # 计算在可行解处的导数,作为新的c
            partial_x 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值