Алгоритм минимизации затрат на механика

Есть одна прямая дорога. А на некотором расстоянии какая-то работа присутствует. И каждая работа имеет какое-то значение.

Теперь математически нам дан массив местоположений, location[]. и там указан массив важности, importance[].

Если вы перемещаетесь из одной точки в другую, механик должен идти и выполнять работу в этом месте.

И механик должен делать всю работу.

Нам нужно минимизировать сумму (важность*расстояние).

Пример для лучшего понимания: -

position     :-  1    6    12   13    14      24
importance   :-  1    2    10   3     5       1

Если мы начнем с 6 и будем двигаться следующим образом

  6  -->   12 --->  13 ---> 14 --> 1 --> 24

= (10*6) + (3*7) + (5*8) + (1*21) + (1*44) = 186

Если двигаться следующим образом,

12 --> 13  --> 14 -->  6 --> 1 --> 24

= (3*1) + (5*2) + (2*10) + (1*15) + (1*38) = 86

So the minimum answer is 86

Мой подход

Сначала нам нужно рассчитать, с чего нам нужно начать. Для этого найдите центр тяжести.

Для позиции = 1 (5*2) + (11*10) + (12*3) + (13*5) + (23*1) = 244

Для позиции = 6 (5*1) + (6*10) + (7*3) + (8*5) + (18*1) = 144.

Аналогичным образом рассчитаем для всех позиций и выберем минимальное значение, т. е. Center of gravity.

Но после выбора этой точки, как перейти на другие позиции, для меня недоступно.

Но я не могу завершить алгоритм. Пожалуйста, помогите в этом.


person devsda    schedule 24.02.2014    source источник
comment
Можете ли вы сказать мне, что не так с моим алгоритмом?   -  person devsda    schedule 24.02.2014
comment
Вы показали нам только половину алгоритма, поэтому мы не можем сказать вам, что с ним не так.   -  person Bernhard Barker    schedule 24.02.2014
comment
Вы уверены, что формулировка задачи верна? Я ожидал, что стоимость будет равна сумме importance * waiting_time. Где waiting_time – это сумма всех расстояний, пройденных до посещения этой позиции. В вашей формулировке это только расстояние, пройденное с момента последней позиции.   -  person Stefan    schedule 24.02.2014
comment
@Stefen Да, ты прав. Посмотрите пример, он показывает то же самое, что вы сказали.   -  person devsda    schedule 24.02.2014
comment
@devnull прочитал ссылку @Dukeling, в частности, ответ Роба Теллера, описывающий переход от v1 -> v2 -> v3 к v1 -> v3 -> v2.   -  person C.B.    schedule 24.02.2014
comment
@Dukeling Я был полностью забит этой проблемой. То, что я знаю, это найти точку, с которой мы можем начать. Но я не уверен, сработает ли описанный выше метод или нет.   -  person devsda    schedule 24.02.2014
comment
@devnull: я не думаю, что жадность здесь работает, поэтому я думаю, что ваш подход не даст вам оптимального решения   -  person Niklas B.    schedule 24.02.2014
comment
если ваш набор данных достаточно мал, вы все равно можете попробовать все комбинации и использовать лучшие (N‹ 10..20), также, как я понимаю, важность - это упрощающий вес (вероятно, основанный на частоте работы и затратах на перемещение материалов), поэтому реальный оптимум может быть отличаться от рассчитанного (если веса не рассчитаны очень тщательно).   -  person Spektre    schedule 25.02.2014
comment
у кого-нибудь есть доказательства, почему мы должны начинать с центра тяжести?   -  person cegprakash    schedule 27.02.2014