onhuko 2024-10-16 12:58 采纳率: 56%
浏览 11
问题最晚将于10月24日00:00点结题

单纯型python实现编译报错

import numpy as np
import sys

def revised_simplex(m, n, p, c, b, A):
    B_idx = list(range(n - m, n))  
    N_idx = list(range(n - m))     
    B = A[:, B_idx]  
    c_B = c[B_idx]   
    iteration = 0
    all_iterations = []

    try:
        while True:
            iteration += 1
            
            B_inv = np.linalg.inv(B)
            X_B = np.dot(B_inv, b)
            
            z = np.dot(np.dot(c_B, B_inv), A)  
            reduced_costs = z - c
            
            if p == 1:
                all_iterations.append(B.copy())
            
            if all(reduced_costs[N_idx] >= 0):  
                X = np.zeros(n)
                X[B_idx] = X_B
                optimal_value = np.dot(c, X)

                print(int(optimal_value))

                for iteration in all_iterations[:-1]: 
                    for row in iteration:
                        print(" ".join(map(str, map(int, row))), end=' \n')  
                    print("**************")

                for i, row in enumerate(all_iterations[-1]):
                    if i == len(all_iterations[-1]) - 1: 
                        print(" ".join(map(str, map(int, row))), end=' ')  
                    else:
                        print(" ".join(map(str, map(int, row))), end=' \n')
                        
                sys.exit(0)
                return optimal_value, X

            
            entering_idx = np.argmin(reduced_costs[N_idx])
            entering_var = N_idx[entering_idx]
            
            direction = np.dot(B_inv, A[:, entering_var])
            
            if all(direction <= 0):
                sys.exit(0)
            
            ratios = np.array([X_B[i] / direction[i] if direction[i] > 0 else np.inf for i in range(m)])
            leaving_idx = np.argmin(ratios)
            leaving_var = B_idx[leaving_idx]
            
            B_idx[leaving_idx] = entering_var
            N_idx[entering_idx] = leaving_var
            
            B = A[:, B_idx]  
            c_B = c[B_idx]   

    except ValueError as e:
        print(e)
        sys.exit(1)

    except Exception as e:
        print("An unexpected error occurred:", e)
        sys.exit(1)  


m, n, p = map(int, input().split(',')) 
c = np.array(list(map(float, input().split(','))))  
b = np.array(list(map(float, input().split(','))))  

A = []
for i in range(m):
    A.append(list(map(float, input().split(','))))  

A = np.array(A)

optimal_value, X = revised_simplex(m, n, p, c, b, A)

在编译过程中,我的结果是正确的, 但后两个test里是非零返回,我觉得应该是遍历过程中超出范围了,但不知道问题在哪

img

img

  • 写回答

13条回答 默认 最新

  • 阿里嘎多学长 2024-10-16 12:58
    关注

    AIGC生成:


    单纯型python实现编译报错

    问题中出现的编译报错可能是由于Python语法错误或语义错误引起的。下面是可能的解决方法:

    1. 语法错误:检查代码中的语法错误,例如语法错误的缩进、括号不匹配、语句不完整等。
    2. 语义错误:检查代码中的语义错误,例如变量未定义、函数未定义、数据类型不匹配等。

    在问题中,代码中出现的错误可能是由于缺少了函数的定义或变量的定义引起的。下面是一个完整的案例:

    import numpy as np
    
    def revised_simplex(m, n, p, c, b, A):
        B_idx = list(range(n - m, n))
        return B_idx
    
    # 测试函数
    m = 2
    n = 5
    p = 3
    c = np.array([1, 2, 3, 4, 5])
    b = np.array([10, 20])
    A = np.array([[1, 2, 3], [4, 5, 6]])
    
    result = revised_simplex(m, n, p, c, b, A)
    print(result)
    

    在上面的案例中,我们定义了一个名为revised_simplex的函数,该函数将输入参数mnpcbA,并返回一个列表B_idx。然后,我们使用这个函数来测试输入参数的正确性。

    在这个案例中,我们假设输入参数的正确性,可以根据实际情况进行修改。


    评论

报告相同问题?

问题事件

  • 创建了问题 今天

悬赏问题

  • ¥15 lvgl v8.2定时器提前到来
  • ¥20 关于#stm32#的问题:想用3*5的矩阵键盘输出数组来控制音乐模块播放15首音乐
  • ¥15 qtcp 发送数据时偶尔会遇到发送数据失败?用的MSVC编译器(标签-qt|关键词-tcp)
  • ¥15 cam_lidar_calibration报错
  • ¥15 拓扑学,凸集,紧集。。
  • ¥15 如何扩大AIS数据容量
  • ¥15 单纯型python实现编译报错
  • ¥15 c++2013读写oracle
  • ¥15 c++ gmssl sm2验签demo
  • ¥15 关于模的完全剩余系(关键词-数学方法)