用intlinprog实现目标函数

问题描述

我有一个Matlab程序,它根据一些约束输出一些二进制变量。

以三个n = 3位{x_1 x_2 x_3,x_4 x_5 x_6,x_7 x_8 x_9}为例,我的程序将根据约束输出所有这些位。

目前,我没有目标功能

但是,目标函数的目标是使n个对中的某些对之间的总汉明距离(HD)最小化。

说我想最小化 HD(x_1 x_2 x_3与x_4 x_5 x_6)+(x_1 x_2 x_3与x_7 x_8 x_9)

毋庸置疑,与HD相比,n可以变化。

如何使用intlinprog执行此操作?我发现this没有帮助。一点方向就可以了。我需要更改我的A,b,Aeq等吗?

解决方法

对于这种类型的目标可能会有更好的实现,但是我想回到基础知识来了解正在发生的事情。一种简单的方法是考虑汉明距离对于一对二进制变量的含义。如果变量的值相同(0和0,或者1和1),则汉明距离为零;如果变量的值不同,则汉明距离为1。

假设您有两个二进制变量v1和v2。创建另一个变量Z并添加约束:

Z >= V1 - V2 
Z >= V2 - V1

现在Z必须大于或等于V1和V2之间的汉明距离。因此,如果最小化Z,则最小化汉明距离。多变量对的泛化是显而易见的-为所有变量对(例如V1和V2)创建一个变量,例如Z,然后最小化那些Z变量的总和。