C++ 如何自动生成和分配矩阵中元素对应的变量?

C++ 如何自动生成和分配矩阵中元素对应的变量?,c++,python,matlab,optimization,matrix,C++,Python,Matlab,Optimization,Matrix,我正在研究一个二元线性规划问题 我对任何计算机语言(刚刚学习了java和C++)都不熟悉,但我可能还是要用电脑,因为问题很复杂。 第一步是为矩阵m(至少8 X 8)中的每个条目声明变量m_ij。 然后,我将矩阵中每个元素的对应值分配给这些变量中的每一个 下一步是在m_ij的值不为0时生成其他变量集x_ij1、x_ij2、x_ij3、x_ij4和x_ij5。 x_ijk变量的值为0或1,我不必为x_ijk变量赋值 可能最简单的方法是声明每个变量并为其赋值,例如 int* m_11 = 5, int

我正在研究一个二元线性规划问题

我对任何计算机语言(刚刚学习了java和C++)都不熟悉,但我可能还是要用电脑,因为问题很复杂。 第一步是为矩阵m(至少8 X 8)中的每个条目声明变量m_ij。 然后,我将矩阵中每个元素的对应值分配给这些变量中的每一个

下一步是在m_ij的值不为0时生成其他变量集x_ij1、x_ij2、x_ij3、x_ij4和x_ij5。 x_ijk变量的值为0或1,我不必为x_ijk变量赋值

可能最简单的方法是声明每个变量并为其赋值,例如

int* m_11 = 5, int* m_12 = 2, int* m_13 = 0, ... int* m_1n = 1

int* m_21 = 3, int* m_12 = 1, int* m_13 = 2, ... int* m_2n = 3
然后选择值不是0的变量,并相应地声明x_ij1~x_ij5

<>但是这可能是太多的工作,特别是因为我要考虑这个问题的许多不同的矩阵。< /P> 有没有什么方法可以自动做到这一点

<>我知道一点java和C++,我在C++中考虑使用LPyS解包(解决二进制整数线性规划问题),但是如果我能很容易地使用它,我愿意使用任何其他语言或程序。 我确信一定有办法做到这一点(我想可能是使用循环吧?),这是一项非常简单的任务,但我只是不知道,因为我没有太多的编程语言

我的一个同伴写了一个程序,用来生成一个满足我们需要的条件的随机矩阵,所以如果我可以使用这个矩阵作为输入,这可能是理想的,但现在任何方法都可以

说,如果有一种方法可以用MS Excel来做,比如把矩阵项放在Excel文件中的单元格,并将其导入C++,并自动生成变量并赋值给它们,那么这将大大简化任务。在C++中,你可以使用一个向量,比如

std::vector<std::vector<int>> matrix;
现在你有了一个所有矩阵坐标的向量,其中你的条件是
true


如果确实希望同时具有
true
false
值,可以使用a和a,其中a包含矩阵坐标作为键,而
bool
作为值:

// Create a type alias, as this type will be used multiple times
typedef std::map<std::pair<int, int>, bool> bool_map_type;
bool_map_type bool_map;
现在您有了一个只包含值为
true
的条目的映射。迭代此贴图以获得矩阵的坐标



当然,我可能完全误解了你的问题,在这种情况下,你当然可以忽略这个答案
m(1,1) = 1
m(2,2) = 1
为您提供一个2x2单位矩阵(在Matlab中,索引以1开头,默认情况下条目为0)。也可以使用相同的方法定义三维矩阵:

x(1,2,3) = 2
对于从Excel导入,如果以CSV格式保存Excel文件,则可以使用函数
dlmread
在Matlab中读取。您也可以稍后尝试直接在Matlab中实现您的算法

最后,如果您想求解二进制整数程序,Matlab中已经有一个内置函数,名为
bintprog
,可以为您求解


希望有帮助

Matlab似乎确实非常适合这项任务。尽管@Dr_Sam提供的示例确实会动态创建矩阵,但我建议您在分配值之前对其进行初始化。这样,如果工作区中已经存在同名的变量,并且变量始终具有预期的大小,那么代码仍然会得到正确的变量

假设您要定义一个方形8x8矩阵:

m = zeros(8)
现在,一般来说,如果您想要初始化一个大小为imax的三维矩阵,
jmax
kmax

imax = 8;
jmax = 8;
kmax = 5;
x = zeros(imax,jmax,kmax);
现在分配到这些矩阵或从中读取矩阵非常容易,请注意,m的长度和with与
x
的第一个维度相同:

m(3,4) = 4; %Assign a value
myvalue = m(3,4) %read the value
m(:,1) = 1:8 *Assign the values 1 through 8 to the first column

x(2,4,5) = 12; %Assign a single value to the three dimensional matrix
x(:,:,2) = m+1; Assign the entire matrix plus one to one of the planes in x.

据我所知,您希望为每个
mij!=0
。如何定义这些
x_ijk
?miy)x_ijk值不必定义。要么是0要么是1,这些值就是不等式组的解。谢谢你的建议。我需要单独变量的原因是,我需要使用这些变量来构建一组约束(方程和不等式)。我可以用std::vector做这个吗?如果这是个愚蠢的问题,我很抱歉。
imax = 8;
jmax = 8;
kmax = 5;
x = zeros(imax,jmax,kmax);
m(3,4) = 4; %Assign a value
myvalue = m(3,4) %read the value
m(:,1) = 1:8 *Assign the values 1 through 8 to the first column

x(2,4,5) = 12; %Assign a single value to the three dimensional matrix
x(:,:,2) = m+1; Assign the entire matrix plus one to one of the planes in x.