Optimize Cross Section with Different Utilization Ratios

Hi, I am optimizing the cross section of truss elements using the OptiCroSec component. However, I was wondering if there was a way or a work around to optimize the elements in tension for a maximum utilization of 0.8 while optimizing the elements in compression for a maximum utilization of 1.0.

Thank you,


Karamba 1.3.2
Rhinoceros 6

you could do the following:

  • calculate the model.
  • check which elements are under tension or compression via the ‘Beam Resultant Forces’-component.
  • disassemble the model.
  • modify the beams so that the ones under tension have a material whose strength is 80% of the material used for the members under compression.
  • in the ‘Modify Element’-component set ‘Buckling’ to false if cross section optimization should not take buckling into account.
  • reassemble the model.


I stumbled upon similar problem. :frowning:

I have a simple truss, where chords should be 0.9 utilization, braces 0.7

For tension, Clemens’ method would work, since material yield strength is proportional to resistance.
For compression though it doesn’t work, buckling is way more important and reduction of yield strength doesn’t correlate linearly.

What I did was create two separate models, one with CroSec Optimization using utilization of 0.7, other using 0.9.
Then made a final third model using AnalyzeThII with fixed cross sections taken from previous two models, chords from 0.9, braces from 0.7.

Problem is that because of different stiffness’s, forces are allocated differently, and because of that final utilization is different.
Chord utilization usually goes a little bit above 0.9.

But so far, it has been acceptable.

@karamba3d, could it be possible to introduce such functionality in the future? Some of my colleagues would be very glad. :slight_smile:
The other thing would be using CroSec optimization, deflection check only for particular load combinations.
Currently I push ULS and SLS combinations into the same solver, because of that, I can’t use deflection check, since it would check deflection for ULS combinations…
Pushing them in different solvers would lead to different profiles.

1 Like

I will put these features on my TODO-List.

Since the material is connected directly to the cross-section, how do I supply OptiCrosSec with my reduced material for my elements in tension while keeping the original material for elements in compression for a second optimization? Because if I optimize only the elements in tension, the forces in the elements in compression will change following a modification of the stiffness of the system.


You could define two families of cross sections with identical cross section properties except for the material and use the first one for elements in compression, the other one for elements in tension.

I am also signing for this feature to be able to set max utilization ratios independetly for different groups of beams.

When i tried to optimize (with Octopus) structure´s parameters to aim for a certain exact deflection while having cross sections optimized in the inner loop to reach minimum weight possible I couldnot obtain global minumum because I had to set max utilization parameter as a gene so utilization could be sacrificed in favor of reaching exact deflection (when 100% utilization deflection was always higher than aimed). But such parameter (max utilziation) is only global and utilization was then unneccesserily lowered on all the groups of elements even on those which could have been utilized to 100% because they dont contribute to stifness (controlling deflection) --> weight was not as small as theoretically possible.

hi @Juan_Gallo

When you define your multiple objective in Octopus, you can choose on which axes (1; 2; 3; C; S …) each objective will be represented
In your case, if you define the mass on axis 1 and the deflection on axis 2, after the calculation, you can easily find your preferred solution on the pareto front.
The last solution of Octopus when the calculation is finished, is not always the best.

This is the convenience of Octopus, at the end of the calculation, the user can check all the solutions to select the best one


Hi, Jacques.

This isn’t a problem with Octopus, but with Karamba functionality.

The particular problem is that you want to optimize 100 beams at once, some are more loaded, some are less. Some have stricter rules, require smaller utilization coef. than others.

But since you can only define it as global value, you have to optimize all beams for the worst case. For example 80% utilization. Because of this, half of the beams, that theoretically are allowed 100% utilization, are also optimized for 80% utilization, thus increasing weight.

This optimization process isn’t octopus, but Karamba - finding best available cross section for given forces.
Octopus is good at finding at optimizing geometry it self - beam spans, heights e.t.c.



Thats another thing where you need it controlable separately.

I think in general all parameters in grasshopper should be treated “list like” meaning if you can set group of beams to be utilizied separately defined in the list
, then it logically implies you can set different utilization ratios for those group of beams individually.

I think this particular thing is easily implementable and guys from Karamba will do so soon