0

在 matlab 中是否有一种有效的方法来解决这个特定问题。

我正在尝试映射此矩阵或可能的数组 BeansRice(见下文)

Beans={0:1,0:1,0:2,0:2,0:2,0:2,0:1,0:1,0:2,0:2}
[a b c d e f g h i j ] = ndgrid(Beans{:})
BeansRice = [a(:) b(:) c(:) d(:) e(:) f(:) g(:) h(:) i(:) j(:)]

进入矩阵/数组BR(见下文)

BR=[abc, de, fg, hij];

如果 a、b 和 c 列的值均为 0(关系偏好),则我偏好 c>b>a。如果所有列 a、b 和 c 的值都为 1(无偏好),则 BR(1)=1。如果 a 和 b 列的值为 0,c 列的值为 2,则 BR(1)=2。如果 a 和 b 列的值为 1,c 列的值为 2,则 BR(1)=1。

我有一个带有索引的 if 函数,但我在想是否可以改进它,使用矩阵中值的等级/顺序来打破平局。寻找一个更有效的过程,因为这只是一个大问题的一个子问题。

4

1 回答 1

0

您可以使用逻辑索引而不是 if 条件。例如

BR1(a==1 & b==1 & c==1)=1
BR1(a==0 & b==0 & c==2)=2
BR1(a==1 & b==1 & c==2)=1
...

然后处理其他部分,BR2(d==... & e>...)=##,然后连接以获得你需要的东西

BR=[BR1(:) BR2(:) ...]

ETC...

于 2013-03-23T06:52:13.843 回答