Hi @s202087 !
Cool bike! It looks like the shape is so bulky because it hit a disconnection.
Disconnections occur when the generative design algorithm decides that a preserve isn't "important" enough to be worth connecting to the rest of the design, either because it has no loads and constraints, or because the loads and/or constraints on it are not significant in the context of the rest of the problem. Unfortunately, when one piece of the design becomes disconnected, this stops the generative design process, and you get a solution that isn't complete yet - as you note it hasn't hit your safety factor target and it seems over-designed.
I ran your study, and noticed that the output mesh is breaking away from the preserves around your axle on the iteration just before the solve terminates:

Looking at the setup, there are no loads or constraints on this preserve, so the optimizer sees no reason to keep it around.
The forums are a bit over-due for a good discussion on disconnections, so I'm going to take a side trip into some general rules for handling/avoiding disconnections in generative design. Not all of these are immediately applicable to your problem. See also this post for a similar situation.
Rule #1 for disconnections: Remove preserves that aren't important for the structural problem you're trying to solve.
Sometimes we have regions of the design that we want to have in our final design, but aren't actually involved in the main loads the structure encounters. Things like mounts for sensors or wires, auxiliary pulleys, etc. It's often best to leave these bodies out of the structural solve and create geometry to connect them to the generatively designed structure afterwards. Other times a preserve has very small loads compared to the rest of the system. In these cases you get to decide whether you want to keep the preserve in the solve or remove it and connect it to the results later.
Your setup is already in pretty good shape in this case, but I wonder about whether a few of these preserves are really important:

Rule #2 for disconnections: Make sure every preserve has either a load or a constraint.
Think about the physical situations this bike gets used in. The load case you have in the design so far looks like it captures the static loads of the rider and cargo, but what about the force of the rider's feet on the pedals? Let's think about the structural loads that could be applied to each of the preserve bodies in a real-world situation. Note that you can create separate "load cases" to cover different scenarios, for example "pedaling", "braking", etc. and every preserve does not need to participate in every load case.
Just having a load or constraint on each preserve isn't necessarily enough to ensure that it doesn't disconnect, though. You need to get the relative "importance" of the preserves close enough to equal that the optimizer doesn't decide one of them isn't worth keeping.
To do this, we sometimes have to create artificial loads (or artificially high loads) that keep it all connected. This will over-design your component a bit, but if it keeps it from disconnecting, you can still remove a ton more material than you've taken out so far. Figuring out what the value for these loads is can be tricky and takes a little practice. As a rule of thumb, if the largest load in the system is 1000 N, I'll tend to make sure all the preserves have at least 100 N of load on them (and not 10 N or 1 N, for example). That's just a rule of thumb, though, because the configuration of the preserves can cause a little load to drive a ton of energy in the part (think a long lever arm with a small load on the end).
Rule #3 for Disconnections: Watch out for multiple constraints
Sometimes, I see generative setups where a bunch of bolts are all applied and each one is tagged as a constraint for all of the load cases:

When you tag something as a constraint, think of it as being super-super glued to a granite slab that's 10,000 times bigger than your assembly. It won't move. At all. Ever. And you can push on it as hard as you want without displacing it at all. What this does is cause any constrained preserve to be able to absorb an infinite amount of applied load by itself. Sometimes the result is that only one or two of the preserves you constrained are actually needed to absorb all of the applied loads, and the rest of the preserves get disconnected because they aren't near any load paths.
In practice, we don't have super-super glue or gigantic granite slabs and the displacements from the rest of our assembly cause the reaction forces to be evenly distributed across the set of preserved faces. To model that in generative design, I create a new load case that represents the "inverse" configuration, where I apply what I think the reaction forces should be and constrain the locations where the loads were originally applied.

Again, it takes either experience or a separate simulation to figure out what those individual load components should be. Typically I will make the sum of the artificial reaction forces equal to about 60% of the original applied load, enough that they encourage balancing between the different constrained faces, but not so large that they become more important than the loads produced by the original load case.
Rule #4 for Disconnections: Start small
It's tempting to throw a ton of preserves into a generative design problem, but the more preserves you have, the more likely one of them is going to disconnect. I would start with 4-5 key preserves for your assembly in my first run and only use a couple of key load cases on them. Iterate on that until I get a sense of the manufacturing constraints I like, the factor of safety that's giving me good results, and the materials I want to consider. Then, with that as a foundation, I'll slowly add additional preserves with appropriate loading until I have my final design.
<<<End of side trip>>>
For your particular problem, I think you should consider removing some preserves and adding loads to others so they are all about equally important. You can also start with just the core preserves you've applied loads to, and once that works, slowly add additional ones.
Hopefully that answers your question! Thanks for indulging me in a lengthy side trip...
Best,
Ben
Ben Weiss
Senior Research Engineer