2016-03-11 3 views
0

Я пытался какое-то время решить задачу диспетчеризации приложения, с которым я работал. Эта проблема заключается в следующем ...Алгоритм планирования времени, основанный на истории

Пример сценария:

ContactA работает Наше приложение в фоновом режиме. Он просто сел в свою машину для своего дома. Итак, он находится в статусе @Evening Commute.

В настройках своего Valet указывается, что он хочет получать уведомления только о телефонных звонках, когда в статусе @Evening Commute (без напоминаний о тексте или электронной почте).

После Наше приложение видит ContactA находится в состоянии @Evening коммутируют, и что он доступен для телефонных звонков, приложение будет сканировать все свои контакты, чтобы найти какие-либо контакты, которые он указанным в качестве предпочтительного для вызова.

алгоритм Th определяет 3 возможные совпадения для ContactA в своем списке Агент:

  • ContactX
  • ContactY
  • ContactZ

Как это решить, какой из подсказывать ContactA, чтобы связаться с ним во время его @Evening Commute?

Во-первых, он должен посмотреть, не работает ли какой-либо из этих трех приложений. Например, он идентифицирует, что ContactX и ContactY оба используют приложение, но ContactZ нет.

Таким образом, он будет смотреть дальше на ContactX и ContactY, чтобы увидеть, если любой из них в настоящее время в состоянии Valet, который принимает телефонные звонки.

Если они оба, он будет смотреть, является ли это фаворитом. Если это так, то этот человек имеет приоритет.

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

Если оба ContactX и ContactY показывает, как «недоступны» прямо сейчас, основываясь на своих настройках App Valet, приложение может выбрать, чтобы побудить меня позвонить ContactZ.

Заранее спасибо

+0

Вы на самом деле описали алгоритм в своем вопросе, что именно вы просите? –

+0

Если есть какой-либо готовый тип алгоритма для решения этой проблемы? –

+0

Вы сами описали алгоритм.Просто переведите его в код, шаг за шагом, там нет волшебства. Я также не вижу, как вопрос связан с названием вопроса («история»). – AnoE

ответ

0

псевдокода (вы не просили какой-либо конкретного языка, но это простая реализация вашего алгоритма в коде). contactsSpecified будет массивом всех контактов, «указанных как предпочтительные для вызова».

var contactsToCall[]; 
//Add all contacts that are using the app and are available 
foreach(contact in contactsSepcified) { 
    if(contact.isUsingApp() && contact.isAvailable()) { 
     contactsToCall.add(contact); 
    } 
} 

//Add all contacts not using the app if none of the app users have been added 
if(contactsToCall.size() == 0) { 
    foreach(contact in contactsSepcified) { 
     if(!contact.isUsingApp()) { 
      contactsToCall.add(contact); 
     } 
    } 
} 

foreach(contact in conctactsToCall) { 
    if(conctact.isFavorite()) { 
     call(contact); 
     return; 
    } 
} 

suggestContacts(contactsToCall); 
+0

Большое спасибо. проблема с этим подходом мы не сохраняем результат, чтобы использовать его для других контактов. может уже контактироватьToCall для ContactA, поэтому для оптимизации расчета для других контактов внутри контактовToCall. –

+0

Извините, я не понимаю вашего комментария. –

+0

Приложение все еще контролирует статус контакта. Это означает, что если есть 4 контакта, мы должны предложить для каждого наилучшего времени связаться с кем-то. если вычисление уже сделано для контакта1, поэтому мы должны сохранить этот расчет, чтобы не повторять его для контакта2, contact3 и contact4. –

Смежные вопросы