Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

288
Visualizações
Algoritmo de clasificación para tareas con dependencias en un diagrama de Gantt

Estoy creando un diagrama de Gantt con dhtmlx-gantt que contiene tareas principales y secundarias.

  1. Una tarea principal puede depender de otra tarea principal o secundaria
  2. Una tarea secundaria puede depender de otra tarea secundaria o principal
  3. Las tareas pueden tener varias dependencias.
  4. Una tarea dependiente solo puede comenzar una vez que se completa la tarea principal.

ingrese la descripción de la imagen aquí

Si se agrega una dependencia a una tarea en Padre A a Padre C, esto moverá el turno de la fecha de inicio a todas las tareas en Padre C, así

ingrese la descripción de la imagen aquí

Así es como se estructuran mis datos

 const tasks = [ { id: 'parent-a', text: 'Parent A', duration: null }, { id: 'child-a-1', text: 'Child 1', parent: 'Parent A', duration: 5 }, { id: 'child-a-2', text: 'Child 2', parent: 'Parent A', duration: 5 }, // ... ] const dependencies = [ { id: 1, source: 'child-a-1', target: 'child-a-2' }, { id: 1, source: 'parent-b', target: 'parent-c' }, // ... ]

Para calcular la fecha de inicio de cada tarea, recorra cada tarea y establezca la fecha dinámicamente en función de la duración de la tarea

 let startDate = new Date() tasks.forEach((task, i, array) => { const correspondingDependency = dependencies.find(d => d.id === task.id) if (correspondingDependency) { array[i].start_date = new Date(startDate.setDate(startDate.getDate() + duration)) } })

El problema con este método es que no actualizará ninguna fecha de start_date para tareas anteriores si se encuentra una dependencia al final de la matriz de dependencies (es decir, child-c-1 depende de child-a-3)

Siento que es posible que necesite usar la recursividad aquí, pero no estoy muy seguro. Espero que todo esto tenga sentido - cualquier ayuda es apreciada

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Según tengo entendido, está desarrollando una lógica de planificación automática, similar a la programación automática que está disponible en las versiones pagas de dhtmlx Gantt.

FUI, trabajo para DHTMLX, que vende este producto, por lo que no puedo profundizar en cómo desarrollar una alternativa gratuita :) Pero creo que puedo darle algunas consideraciones generales.

  1. Recomiendo encarecidamente el uso de la recursividad para la planificación automática. Las implementaciones de este enfoque que he visto han sido difíciles de depurar y requieren un mantenimiento constante. Desde mi experiencia, implementar un algoritmo intuitivo que funcione con cualquier estructura posible del gantt es bastante desafiante.
  2. Lo que definitivamente funciona, y se usa en diferentes motores de Gantt disponibles en el mercado, es el enfoque cuando considera Tareas y Enlaces de Gantt como Gráfico dirigido: https://en.wikipedia.org/wiki/Directed_graph Donde las tareas son vértices, y los enlaces son los bordes del gráfico.

Una vez que pueda representar sus datos en forma de gráfico, todo lo demás es realmente simple:

  • puedes detectar bucles en tus dependencias
  • podrá ordenar los elementos de tal manera que siempre procese las tareas dependientes solo después de procesar las tareas de las que dependen: clasificación topológica
  • después de ordenar el conjunto de datos topológicamente, puede iterar y calcular la fecha de inicio de cada tarea como 'predecessor.start_date + predecesor.duration + link.lag', donde se garantiza que 'predecessor' se procesará en una de las iteraciones anteriores, sin necesitando alguna recursividad.

La parte desafiante es convertir su estructura de datos de la jerarquía padre-hijo de Gantt a la estructura plana de Directed Graph. Básicamente, significa que desea deshacerse de los proyectos en su conjunto de datos y convertir las relaciones que involucran proyectos con relaciones entre sus subtareas.

Puede sonar complicado al principio, pero el código será fácil de entender y de depurar.

Si limita el alcance de lo que está haciendo, por ejemplo, no permite relaciones entre proyectos, puede salirse con la suya con un enfoque más simple e intuitivo. Pero para una solución de propósito general, creo que el enfoque que describí es la apuesta más segura.

PD: si está implementando una programación automática similar a la de dhtmlxGantt ( https://docs.dhtmlx.com/gantt/desktop__auto_scheduling.html ) y si planea usarla comercialmente, podría valer la pena obtener una versión paga de dhtmlxGantt donde la programación automática está disponible de forma inmediata. La implementación de un algoritmo de programación automática confiable puede requerir mucho tiempo y esfuerzo, por lo que obtener una solución lista puede ser menos costoso que desarrollarla desde cero.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda